например, я получаю строку 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()
какие-либо идеи?
But I finally get "www.hello.com" when using the the XPath statement //p/text()
Выбирает любой текстовый узел , который является дочерним для элемента p в документе.
p
Однако вам нужны не только дочерние элементы текстового узла, но и любые дочерние элементы, включая такие элементы, как <br> и <a>.
<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
Будет выбран элемент p.
/p/*
Извлечет все элементы, которые являются дочерними элементами p.Это то, что вы хотите.
Предупреждение .Ваш элемент <br> плохо сформирован.Вы должны закрыть его, чтобы он мог быть правильно сформированным пустым элементом <br/>
<br/>