Это следующий стандартный код для синтаксического анализа XML с использованием XPath в Java. Я не могу отлаживать, почему я получаю нулевые значения. Я приложил java-файл, xml-файл и вывод. Был бы признателен, если кто-нибудь сможет немного объяснить, где я ошибаюсь. Заранее спасибо! :)XML XPath Parsing in Java
XPathParser.java
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class XPathParser {
public static void main(String args[]) throws Exception {
//loading the XML document from a file
DocumentBuilderFactory builderfactory = DocumentBuilderFactory.newInstance();
builderfactory.setNamespaceAware(true);
//XML read
DocumentBuilder builder = builderfactory.newDocumentBuilder();
Document xmlDocument = builder.parse("Stocks.xml");
// Creates a XPath factory
XPathFactory factory = javax.xml.xpath.XPathFactory.newInstance();
//Creates a XPath Object
XPath xPath = factory.newXPath();
//Compiles the XPath expression
//XPathExpression xPathExpression_count = xPath.compile("count(//stock)");
XPathExpression xPathExpression = xPath.compile("//stock");
//Run the query and get a nodeset
Object result = xPathExpression.evaluate(xmlDocument,XPathConstants.NODESET);
//Cast the result into a DOM nodelist
NodeList nodes = (NodeList) result;
System.out.println(nodes.getLength());
System.out.println(nodes.item(0));
for (int i=0; i<nodes.getLength();i++){
System.out.println(nodes.item(i).getNodeValue());
}
}
}
Stocks.xml
<?xml version="1.0" encoding="UTF-8"?>
<stocks>
<stock>
<symbol>ABC</symbol>
<price>10</price>
<quantity>50</quantity>
</stock>
<stock>
<symbol>XYZ</symbol>
<price>20</price>
<quantity>1000</quantity>
</stock>
</stocks>
ВЫВОД:
2
[stock: null]
null
null
Что вы ожидаете? Ваш XPath выбирает все узлы 'stock', после чего вы вызываете [' getNodeValue'] (http://docs.oracle.com/javase/1.5.0/docs/api/org/w3c/dom/Node.html#getNodeValue ()) на них, который возвращает 'null'. Что вы пытаетесь получить? –
попробуйте напечатать 'nodes.item (i) .getTextContent()' вместо 'nodes.item (i) .getNodeValue()'. Или измените выражение XPath на '// stock/text()' –