问题描述
如下xml<persons><person><age>50</age><name>zhangsan</name></person><person><age>50</age><name>lisi</name></person></persons>
如何遍历这个xml,并且打印出每个节点的路径如:第一个person的age应该是:persons.person_1.age第二个person的name是:persons.person_2.name
解决方案
解决方案二:
传入叶子节点,找父节点,递归调用。publicstaticStringgetXMLAbsolutePath(Elemente){if(e.getParent()!=null){returngetXMLAbsolutePath(e.getParent())+"."+e.getName();}else{returne.getName();}}
解决方案三:
importjava.io.IOException;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException;publicclassmain{publicmain(){//TODOAuto-generatedconstructorstub}privatestaticbooleanparseChild(Nodenode,Stringpath){if(null==node)returnfalse;if(null!=path&&!path.equals(""))path=path+"."+node.getNodeName();elsepath=node.getNodeName();if(!node.getNodeName().startsWith("#"))System.out.println(path);NodeListnodelist=node.getChildNodes();for(inti=0;i<nodelist.getLength();i++){Nodechild=(Node)nodelist.item(i);parseChild(child,path);}returntrue;}/***@paramargs*/publicstaticvoidmain(String[]args){Documentdocument;try{document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.txt");NodemapTag=document.getChildNodes().item(0);parseChild(mapTag,null);}catch(SAXExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}catch(ParserConfigurationExceptione){e.printStackTrace();}}}
解决方案四:
引用2楼r10101010的回复:
importjava.io.IOException;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException;publicclassmain{publicmain(){//TODOAuto-generatedconstructorstub}privatestaticbooleanparseChild(Nodenode,Stringpath){if(null==node)returnfalse;if(null!=path&&!path.equals(""))path=path+"."+node.getNodeName();elsepath=node.getNodeName();if(!node.getNodeName().startsWith("#"))System.out.println(path);NodeListnodelist=node.getChildNodes();for(inti=0;i<nodelist.getLength();i++){Nodechild=(Node)nodelist.item(i);parseChild(child,path);}returntrue;}/***@paramargs*/publicstaticvoidmain(String[]args){Documentdocument;try{document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.txt");NodemapTag=document.getChildNodes().item(0);parseChild(mapTag,null);}catch(SAXExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}catch(ParserConfigurationExceptione){e.printStackTrace();}}}
test.txt是你的xml内容
解决方案五:
C#foreach(XElementnodeindoc.Element("Persons").Nodes()){if("Person"==node.Name.LocalName){//...}...}
解决方案六:
循环解析判断。
解决方案七:
这就是一个dom树解析呀