Разбор XML с помощью XPath в Java

У меня есть XML со структурой, подобной этой:

<category>
   <subCategoryList>
      <category>

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

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

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

Что за "и так далее" ... это важно

tcurdt 05.12.2008 04:50

Также вопрос в том, насколько большим будет ваш файл.

tcurdt 05.12.2008 04:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
9
2
35 088
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

да, но это возвращает мне список всех узлов, которые соответствуют этому выражению, поэтому все дочерние элементы включены ... спасибо

Mg. 04.12.2008 17:53

Что вы имеете в виду, все дети включены? Я думаю, вы упускаете некоторые детали.

sblundy 04.12.2008 17:57

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

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

Затем вы можете анализировать дочерние элементы категории по своему усмотрению.

Ответ принят как подходящий

В Эта ссылка есть все необходимое. В шортах:

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

Другие вопросы по теме