Так что я довольно новичок в выражениях Xpath и использую его с Java. Я пытаюсь проанализировать файл XML, чтобы получить все узлы, имеющие некоторый текст между тегами. Например, если у меня есть XML как
<employee>
<emp>John <age>25</age>
</emp>
<salary> 1000
</salary>
</employee>
Тогда я должен получить
Иоанна 25 1000
Т.е. только текстовое содержимое между любыми тегами без получения дубликатов.
Я следую этому учебнику здесь, чтобы использовать выражение Xpath для получения желаемых значений.
Я написал следующий фрагмент:
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.Element;
import org.w3c.dom.NodeList;;
public class xpathTest {
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("TestXmlFile.xml");
//Create XPath
XPathFactory xpathfactory = XPathFactory.newInstance();
XPath xpath = xpathfactory.newXPath();
XPathExpression expr = xpath.compile("//*[text()]"); // to get all all nodes having some text
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
}
Проблема, с которой я сталкиваюсь в этом коде, заключается в том, что он только возвращает мне нулевые значения вместо этих текстовых значений. Не могли бы вы заметить, что я делаю здесь не так?