写了一个简单的递归函数,如下 for(Node node = root.getFirstChild(); node!=null; node = node.getNextSibling())
{

if(node.getNodeType()!=Node.ELEMENT_NODE) continue;//递归函数
parseDocumentTree(node, proteinid, filename,tempgetinfo,tempprotein);
}
public void parseDocumentTree(Node nodeitem, ProteinID proteinid, String filename,Vector<Vector<String>> tempgetinfo,Vector<Vector<String>> tempprotein)
{
//只对p1或者p2开始的结构进行parse
if(nodeitem.getNodeName().equals("p1")||nodeitem.getNodeName().equals("p2"))
{
//开始收集第一层节点信息
String pairvalue=nodeitem.getAttributes().getNamedItem("pair").getNodeValue();
String nodename=nodeitem.getNodeName().substring(1,2);

Vector<String> tempvec=new Vector<String>();
Vector<String> tempproteinvec=new Vector<String>();
tempvec.add(nodename);
tempvec.add(pairvalue);
tempvec.add(filename);

//注意这里的赋值问题,当重新递归后,值清空了?但是tempgetinfo不是局部函数。
tempgetinfo.add(tempvec);

tempvec.removeAllElements();

for(Node node=nodeitem.getFirstChild(); node!=null; node=node.getNextSibling())
{
if(node.getNodeType()==Node.ELEMENT_NODE)
{
//如果已经达到根节点,获得protein信息
if(node.getNodeName().equals("prot"))
{
String nodeflag=nodeitem.getAttributes().getNamedItem("pair").getNodeValue();
String proteinname=node.getFirstChild().getNodeValue();
tempproteinvec.add(nodeflag);
tempproteinvec.add(proteinname);
tempprotein.add(tempproteinvec);
tempvec.removeAllElements();

}
else
{ pairvalue=node.getAttributes().getNamedItem("pair").getNodeValue();
nodename=node.getNodeName().substring(1,2);

 
tempvec.add(nodename);
tempvec.add(pairvalue);
tempvec.add(filename);
tempgetinfo.add(tempvec);
tempvec.removeAllElements();
String tempchild=node.getFirstChild().getNodeName();
if(node.getFirstChild().getNodeName().equals("prot"))
{
if(node.getFirstChild().getNodeType()!=Node.ENTITY_NODE)continue;


String proteinname=node.getFirstChild().getFirstChild().getNodeValue();
String nodeflag=node.getAttributes().getNamedItem("pair").getNodeValue();
tempproteinvec.add(nodeflag);
tempproteinvec.add(proteinname);
tempprotein.add(tempproteinvec);
tempvec.removeAllElements();

}

//继续递归
else
{
parseDocumentTree(node, proteinid, filename,tempgetinfo,tempprotein);
}为什么每次递归后,tempgetinfo.add(tempvec);都会不断的赋值为null
比如,tempvec分别压入值{“1,2,3”,“4,5,6”,“7,8,9”}
当tempgetinfo压入了{“1,2,3”}以及{“4,5,6”},tempgetinfo为{“1,2,3”,“4,5,6”}
当再次压入{“7,8,9”},我希望得到的值是tempgetinfo{“1,2,3”,“4,5,6”,“7,8,9”},但是我调试后发现是{“null”,“null”,“7,8,9”}
谢谢!