html 4.0 сущности в запросах XPATH - PullRequest
3 голосов
/ 15 января 2010

Я не знаю точно, почему выражение xpath:

//h3[text()='Foo › Bar']

не соответствует:

<h3>Foo &rsaquo; Bar</h3>

Это кажется правильным? Как мне запросить эту разметку?

Ответы [ 2 ]

4 голосов
/ 15 января 2010

XPath не определяет никаких специальных escape-последовательностей. Когда XPath используется в XSLT (например, в атрибутах элементов документа XSLT), escape-последовательности обрабатываются процессором XML, который читает таблицу стилей. Если вы используете XPath в не XML-контексте (например, из Java или C # или другого языка) через библиотеку, и ваш запрос XPath является строковым литералом на этом языке, вы не получите никакой escape-обработки, кроме той, которую сам язык обычно делает.

Если это C # или Java, это должно работать:

String xpath = "//h3[text()='Foo \u8250 Bar']";
...

Как примечание: в XSLT он также не будет работать, поскольку XSLT использует XML, который не определяет символьную сущность &rsaquo; - он определяет только &lt;, &gt;, &quot;, &apos; и &amp;. Вам нужно будет либо использовать &#x8250;, либо определить символьную сущность самостоятельно в объявлении DOCTYPE таблицы стилей XSLT.

1 голос
/ 15 января 2010

Из спецификации XPath :

XPath работает с абстрактной логической структурой документа XML, а не с поверхностным синтаксисом

… так что если вы не используете запрос внутри (в отличие от «для запроса») языка, который разрешает эту сущность (возможно, XSLT с DTD, который включает сущность (если это возможно, я далек от XSLT эксперт)), я бы не ожидал, что это сработает.

Используйте буквенный символ или escape-последовательность, распознаваемую любым языком, с которого вы используете XPath.

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