2017-02-21 20 views
1

Использование libxml2, есть ли способ заменить стандартные объекты символов (<, >, ', ", &) со своими соответствующими символами в выражении XPath?Как заменить объекты символов в XPath?

Например, я хотел бы сделать это так, чтобы:

  • math[contains(., '1 &lt; 2') поиски контента, который содержит 1 < 2
  • item[@id="3&quot; bracket"] поиск по атрибутам со значением 3" bracket

libxml2 удобно заменяет эти объекты по умолчанию при анализе XML, но не при оценке выражений XPath. Есть ли способ включить замену XPath?

(Edit: Я не вижу ничего о XPath в libxml2-х documentation about entities.)

(Edit:. Если это не способ сделать это, то я бы принял в ответ объяснение, почему не libxml2 представляется весьма полным в его реализации XML, поэтому я подозреваю, что если это не поддерживается, либо это был намеренный выбор, либо мое предложение как-то проблематично.)

ответ

2

Нет, и причина в том, что XPath лексически определяется независимо от XML. Сам XPath может содержать литералы < и & символов без конфликта с их особым назначением в XML, поэтому XPath не нуждается в символьных сущностях.

Когда XPaths используются в XML (например, в XSLT), это XML синтаксический анализ, который требует, чтобы < и & быть экранированы, и это XML-парсер, который предоставляет приложение (включая библиотеку XPath) со строкой значение для выражения XPath, в котором символьные сущности расширяются до своих литералов.