我想使用java从xml(DOM)读取多级标签,示例xml是:
<root> <subclass> <subclass> <subclass> <name>test1</name> <address>address1</address> </subclass> <name>test2</name> <address>address2</address> </subclass> <name>test3</name> <address>address3</address> </subclass> </root>如何阅读&lt; name&gt; test2 &lt; / name&gt;和&lt;地址&gt; 地址2 &lt; /地址&gt;从上面的xml?
我已经给出了示例代码..但我需要动态地找到值。 当我使用子类标签迭代bu时,它会提供所有数据。只是我想知道如何获取特定数据,例如&lt; name&gt; test2 &lt; / name&gt;和&lt;地址&gt; 地址2 &lt; /地址&gt;
下面是我的java代码,它正在阅读上面的xml:
NodeList fList = firstWordElement
.getElementsByTagName("root");
for (int i = 0; i < fList.getLength(); i++) {
Node firstFLNode = fList.item(i);
if (firstFLNode.getNodeType() == Node.ELEMENT_NODE) {
Element firstWdElement = (Element) firstFLNode;
NodeList firstWdList = firstWdElement.getElementsByTagName("innerclass");
for (int j = 0; j < firstWdList.getLength(); j++) {
Element firstWd1Element = (Element) firstWdList.item(j);
if (firstWd1Element.getNodeType() == Node.ELEMENT_NODE) {
String InnerName = ParseUtil.getTagValue("name", firstWd1Element);
String InnerFormat = ParseUtil.getTagValue("format", firstWd1Element);
String InnerDescription = ParseUtil.getTagValue("description", firstWd1Element);
NodeList innerClassList = firstWd1Element.getElementsByTagName("subclass");
for (int k = 0; k < innerClassList.getLength(); k++) {
Element subClassElement = (Element) innerClassList
.item(k);
if (subClassElement.getNodeType() == Node.ELEMENT_NODE) {
String InnerSubName = ParseUtil.getTagValue("name", subClassElement);
System.out.println("Innername==="+ InnerSubName);
String InnerSubFormat = ParseUtil.getTagValue("format", subClassElement);
System.out.println("Innerformat==="+ InnerSubFormat);
String InnerSubDescription = ParseUtil.getTagValue("description", subClassElement);
System.out.println("Innerdescription==="+ InnerSubDescription);
}
}
}
}
}
}
答案 0 :(得分:1)
快速执行此操作的方法是使用XPath查询。看看这些教程:
http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html
http://www.javabeat.net/2009/03/how-to-query-xml-using-xpath/
答案 1 :(得分:0)
传统上,您必须通过节点进行迭代,通常通过从父节点创建带有getChildren()的NodeList来完成。如果你只想要test2 -node,你必须进行某种比较 - 你不能直接跳到第二个节点。也就是说你可以,但这不会成为一个非常强大或可扩展的解决方案。