Analisando XML com XPath em Java

Eu tenho um XML com uma estrutura semelhante a esta:

         

Eu tenho uma class de categoria que tem uma lista de subcategory ( List ). Eu estou tentando analisar esse arquivo XML com XPath, mas não consigo obter as categorias filho de uma categoria.

Como posso fazer isso com o XPath? Existe uma maneira melhor de fazer isso?

Este link tem tudo que você precisa. Em calções:

  public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException { DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse("persons.xml"); XPath xpath = XPathFactory.newInstance().newXPath(); // XPath Query for showing all nodes value XPathExpression expr = xpath.compile("//person/*/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()); } } 

Eu acredito que a expressão XPath para isso seria ” //category/subCategoryList/category “. Se você quiser apenas os filhos do nó da category raiz (supondo que seja o nó raiz do documento), tente ” /category/subCategoryList/category “.

Isso vai funcionar para você:

 NodeList nodes = (NodeList) xpath.evaluate("//category//subCategoryList/category", inputSource, XPathConstants.NODESET); 

Então você pode analisar os filhos da categoria como quiser.