【发布时间】:2013-07-10 19:49:26
【问题描述】:
我有一个这样的xml
<Processed>
<address>
<buildingnumber> 29 </buildingnumber>
<street> South Lasalle Street</street>
<city>Chicago</city>
<state>Illinois</state>
<zip>60603</zip>
</address>
<address>
<buildingnumber> 30 </buildingnumber>
<street> West Street</street>
<city>xxx</city>
<state>yyy</state>
<zip>12345</zip>
</address>
</Processed>
我正在使用以下代码来打印值
DocumentBuilder builder = tryDom.getDocumentBuilder();
xmlDocument = tryDom.getXmlDocument(builder, file);
factory = XPathFactory.newInstance();
xPath = factory.newXPath();
String expression8 = "//address/descendant-or-self::*[not(*)]";
try {
xPathExpression = xPath.compile(expression8);
Object result = xPathExpression.evaluate(xmlDocument,XPathConstants.NODESET);
printXpathResult(result);
} catch (XPathExpressionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
public static void printXpathResult(Object result){
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
String nodeName = node.getNodeName();
String nodeValue = node.getTextContent();
System.out.println(nodeName + " = " + nodeValue);
}
} //end of printXpathResult()
它给了我像
这样的输出buildingnumber = 29
street = South Lasalle Street
city = Chicago
state = Illinois
zip = 60603
buildingnumber = 30
street = West Street
city = xxx
state = yyy
zip = 12345
但问题是我不知道一个地址何时结束而另一个地址何时开始。我想要在zip = 60603 之后。我知道第一个地址是结束,其他地址是开始。如何区分记录?
谢谢
【问题讨论】:
-
你知道地址节点出现在相关节点之前的个数吗
-
不,因为我实时从网上获取 xml,我不知道会有多少地址记录......我希望每条记录都有一些我如何知道新的记录开始...
-
我建议将您的 xpaht 更改为“//address”,然后遍历结果 NodeList 的子节点(现在是“地址”。
标签: java dom xpath xml-parsing