Как использовать XPath, чтобы найти значение узла с тегом CDATA в Java - PullRequest
4 голосов
/ 08 ноября 2011

Я использовал XPath для разбора данных rss xml, а данные

<rss version="2.0">
  <channel>
    <title>
      <![CDATA[sports news]]>
    </title>
  </channel>
</rss>  

Я хочу получить текст "спортивные новости", используя xpath "/ rss / channel / title / text ()", но результат не тот, который я хочу, реальный результат - "\ r \ n", так как чтобы найти результат, который я хочу.

код ниже:

    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
    XPathFactory xpathFactory = XPathFactory.newInstance();
    XPath xPath = xpathFactory.newXPath();
    Node node = (Node) xPath.evaluate("/rss/channel/title/text()", doc,XPathConstants.NODE);
    String title = node.getNodeValue();

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

Попробуйте вызвать setCoalescing (true) на вашем DocumentBuilderFactory, и это сведет все CDATA / текстовые узлы в отдельные узлы.

0 голосов
/ 08 ноября 2011

Вы можете попробовать изменить выражение XPath на

"string(/rss/channel/title)"

и использовать тип возврата STRING вместо NODE:

Node node = (Node) xPath.evaluate("string(/rss/channel/title)", doc,
                                  XPathConstants.STRING);

Таким образом, вы выбираете не текстовый узел, а скореестроковое значение элемента title, состоящее из объединения всех его текстовых узлов-потомков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...