Использование XPath для получения текста внутри родительского узла - PullRequest
2 голосов
/ 21 октября 2011

например, я получаю строку html следующим образом:

<p><br><a href=\"http://www.hello.com/en/\">www.hello.com</a></p>

И я хочу получить такой результат:

<br><a href=\"http://www.hello.com/en/\">www.hello.com</a>

Но я, наконец, получаю "www.hello.com "при использовании оператора XPath

//p/text()

какие-либо идеи?

Ответы [ 3 ]

1 голос
/ 22 октября 2011
But I finally get "www.hello.com" when using the the XPath statement 

    //p/text() 

Выбирает любой текстовый узел , который является дочерним для элемента p в документе.

Однако вам нужны не только дочерние элементы текстового узла, но и любые дочерние элементы, включая такие элементы, как <br> и <a>.

Решение

Использование:

/p/node()

когда это выражение XPath сравнивается с предоставленным XML (исправлено, чтобы сделать правильно сформированный XML-документ):

<p><br/><a href="http://www.hello.com/en/">www.hello.com</a></p>

выбраны следующие два узла :

<br/><a href="http://www.hello.com/en/">www.hello.com</a>

Проверка на основе XSLT :

Это преобразование:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select="/p/node()"/>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<p><br/><a href="http://www.hello.com/en/">www.hello.com</a></p>

копирует выбранные узлы на выход :

<br/><a href="http://www.hello.com/en/">www.hello.com</a>
1 голос
/ 21 октября 2011

Используйте это:

//p

Будет выбран элемент p.

0 голосов
/ 21 октября 2011
/p/*

Извлечет все элементы, которые являются дочерними элементами p.Это то, что вы хотите.

Предупреждение .Ваш элемент <br> плохо сформирован.Вы должны закрыть его, чтобы он мог быть правильно сформированным пустым элементом <br/>

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