我正在使用xPath来获取节点值。这是我的xml
<?xml version="1.0" encoding="UTF-8"?>
<address>
<buildingnumber> 29 </buildingnumber>
<street> South Lasalle Street</street>
<city>Chicago</city>
<state>Illinois</state>
<zip>60603</zip>
</address>
这是我起诉的代码
DocumentBuilder builder = tryDom.getDocumentBuilder();
Document xmlDocument = tryDom.getXmlDocument(builder, file);
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
XPathExpression xPathExpression = null;
String expression7 = "//address/descendant-or-self::*";
try {
xPathExpression = xPath.compile(expression7);
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.getNodeValue();
System.out.println(nodeName + " = " + nodeValue);
}
} //end of printXpathResult()
我得到的输出是
address = null
buildingnumber = null
street = null
city = null
state = null
zip = null
我期待这个输出
address = null
buildingnumber = 29
street = South Lasalle Street
city = Chicago
state = Illinois
zip = 60603
为什么我得到null虽然建筑物数量和其他值有价值?我怎样才能得到我想要的输出?
由于
修改 -------------------------------------------------- ------------
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()
在此之后我得到以下输出
address =
29
South Lasalle Street
Chicago
Illinois
60603
buildingnumber = 29
street = South Lasalle Street
city = Chicago
state = Illinois
zip = 60603
为什么我得到地址= 29 ....我认为它应该是address = null
?
由于
答案 0 :(得分:0)
在DOM API中,{em>指定{em>始终为元素节点返回getNodeValue()
(请参阅table at the top of the JavaDoc page for Node
)。您可能需要getTextContent()
代替。
但是,请注意,对于null
元素,address
不会给您null,而是您将获得所有文本节点后代的连接,包括空格。在实际用例中,您可能在xpath中使用getTextContent()
而不是descendant::
,因此您不必专门处理父元素,或使用类似
descendant-or-self::
将结果限制为叶元素(那些本身没有任何子元素的元素)。