如何替换 XPath 中的字符实体?
How to replace character entities in XPath?
使用 libxml2,有没有办法用它们在 XPath 表达式中的对应字符?
例如,我想这样做:
math[contains(., '1 < 2')
搜索包含 1 < 2
的内容
item[@id="3" bracket"]
搜索值为 3" bracket
的属性
libxml2 在解析 XML 时默认会方便地替换这些实体,但在计算 XPath 表达式时不会。有没有办法启用 XPath 的替换?
(编辑:我在 libxml2 的 documentation about entities 中没有看到任何关于 XPath 的信息。)
(编辑:如果没有办法做到这一点,那么我会接受一个解释为什么不这样做的答案。libxml2 在 XML 的实现中似乎非常彻底,所以我怀疑如果这个不支持,要么是故意的,要么我的提议有问题。)
不,原因是 XPath 的词法定义独立于 XML。 XPath 本身可以包含文字 <
和 &
字符而不与它们在 XML 中的特殊用途冲突,因此 XPath 不需要字符实体。
当在 XML 中使用 XPaths 时(例如,在 XSLT 中),XML 解析要求对 <
和 &
进行转义,并且它是 XML 解析器,它为应用程序(包括 XPath 库)提供 XPath 表达式的字符串值,其中字符实体被扩展为其文字定义。
使用 libxml2,有没有办法用它们在 XPath 表达式中的对应字符?
例如,我想这样做:
math[contains(., '1 < 2')
搜索包含1 < 2
的内容
item[@id="3" bracket"]
搜索值为3" bracket
的属性
libxml2 在解析 XML 时默认会方便地替换这些实体,但在计算 XPath 表达式时不会。有没有办法启用 XPath 的替换?
(编辑:我在 libxml2 的 documentation about entities 中没有看到任何关于 XPath 的信息。)
(编辑:如果没有办法做到这一点,那么我会接受一个解释为什么不这样做的答案。libxml2 在 XML 的实现中似乎非常彻底,所以我怀疑如果这个不支持,要么是故意的,要么我的提议有问题。)
不,原因是 XPath 的词法定义独立于 XML。 XPath 本身可以包含文字 <
和 &
字符而不与它们在 XML 中的特殊用途冲突,因此 XPath 不需要字符实体。
当在 XML 中使用 XPaths 时(例如,在 XSLT 中),XML 解析要求对 <
和 &
进行转义,并且它是 XML 解析器,它为应用程序(包括 XPath 库)提供 XPath 表达式的字符串值,其中字符实体被扩展为其文字定义。