2008-12-04 2 views
8

У меня есть XML со структурой, подобной этой:Синтаксический XML с помощью XPath в Java

<category> 
    <subCategoryList> 
     <category> 

     </category> 
     <category> 
     <!--and so on --> 
     </category> 
    </subCategoryList> 
</category> 

У меня есть класс Категория, которая имеет subcategory список (List<Category>). Я пытаюсь проанализировать этот XML-файл с помощью XPath, но я не могу получить дочерние категории категории.

Как я могу это сделать с помощью XPath? Есть лучший способ сделать это?

+0

Что «и так далее» ... что важно – tcurdt 2008-12-05 01:50:20

+0

Кроме того, вопрос в том, насколько велика будет ваш файл. – tcurdt 2008-12-05 01:51:30

ответ

18

This link имеет все необходимое. В трусах:

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()); 
    } 
    } 
2

Я считаю, что выражение XPath для этого будет «//category/subCategoryList/category». Если вам просто нужны дочерние узлы корня category (предполагается, что это корневой узел документа), попробуйте «/category/subCategoryList/category».

0

Это будет работать для вас:

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

Затем вы можете разобрать детей категории, как вы хотите.

Смежные вопросы