#xml #xpath
#xml #xpath
Вопрос:
например, я получаю строку 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()
есть идеи?
Ответ №1:
Используйте это:
//p
Он выбирает p
элемент.
Комментарии:
1. результат по-прежнему «www.hello.com » с помощью «//p» я хочу, чтобы узлы <br> и <a> были в строке результата.
2. @MaS, это зависит от того, как вы используете его в своем движке XPath.
3. @MaS,
//p
выберет любой элемент p в документе4. Я не знаю о движке XPath, можете ли вы привести мне пример для этого случая?
5. Как я могу получить символы между <p> и </p> ?
Ответ №2:
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>
Ответ №3:
/p/*
Извлекает все элементы, которые являются дочерними элементами элемента p. Это то, что вы хотите.
Предупреждение. Ваш элемент <br>
неправильно сформирован. Вы должны закрыть его, чтобы он мог быть правильно сформированным пустым элементом <br/>
Комментарии:
1. /p/node() возвращает тот же результат «www.hello.com »
2. Я не знаю, какой движок XPath вы используете. Но если вы сделаете xmllint —xpath ‘/p/node()’ file.xml — с помощью file.xml содержащий вашу строку — вывод <br><a href=» hello.com/en «>www.hello.com </a>. Я проверил это перед публикацией.
3. Как вы выполняете свои запросы XPath?
4. Я запускаю его в IOS с помощью libxml2 и библиотеки hpple