Как считать XML использование XPath в Java

Я хочу считать данные XML с помощью XPath в Java, таким образом, для получения информации я заключил, что не могу проанализировать XML согласно своему требованию.

вот то, что я хочу сделать:

Получите XML-файл от онлайн через его URL, затем используйте XPath для парсинга его, я хочу создать два метода в нем. Каждый находится, в котором я ввожу определенный идентификатор атрибута узла, и я получаю все дочерние узлы, как результат, и второй, предполагают, что я просто хочу получить определенное дочернее значение узла только

<?xml version="1.0"?>
<howto>
  <topic name="Java">
      <url>http://www.rgagnonjavahowto.htm</url>
  <car>taxi</car>
  </topic>
  <topic name="PowerBuilder">
       <url>http://www.rgagnon/pbhowto.htm</url>
       <url>http://www.rgagnon/pbhowtonew.htm</url>
  </topic>
  <topic name="Javascript">
        <url>http://www.rgagnon/jshowto.htm</url>
  </topic>
 <topic name="VBScript">
       <url>http://www.rgagnon/vbshowto.htm</url>
 </topic>
 </howto>

В вышеупомянутом примере я хочу считать все элементы, если я ищу через @name и также одну функцию, в которой я просто хочу URL от @name 'JavaScript', только возвращают один элемент узла.

263
задан frogatto 30 October 2018 в 23:55
поделиться

1 ответ

Вам понадобится что-то вроде этого:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(<uri_as_string>);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(<xpath_expression>);

Затем вы вызываете expr.evaluate () , передавая документ, определенный в этом коде, и ожидаемый тип возврата, и приведите результат к типу объекта результата.

Если вам нужна помощь с конкретными выражениями XPath, вы, вероятно, должны задать ее как отдельные вопросы (если только это не был ваш вопрос здесь в первую очередь - я понял, что ваш вопрос заключается в том, как использовать API в Java).

Редактировать: (Ответ на комментарий): Это выражение XPath даст вам текст первого элемента URL в PowerBuilder:

/howto/topic[@name='PowerBuilder']/url/text()

Это даст вам второй:

/howto/topic[@name='PowerBuilder']/url[2]/text()

Вы получите это с помощью этого кода:

expr.evaluate(doc, XPathConstants.STRING);

Если вы не знаете, сколько URL-адресов находится в данном узле, вам лучше сделать что-то вроде этого:

XPathExpression expr = xpath.compile("/howto/topic[@name='PowerBuilder']/url");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

И затем перебрать NodeList в цикле.

386
ответ дан 23 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: