如何在XPath中替换字符实体?

时间:2017-02-21 20:24:52

标签: xml xpath libxml2

使用libxml2,有没有办法将标准字符实体(<>'"&)替换为相应的XPath表达式中的字符?

例如,我想这样做:

  • math[contains(., '1 &lt; 2')搜索包含1 < 2
  • 的内容
  • item[@id="3&quot; bracket"]搜索值为3" bracket
  • 的属性
在解析XML时,默认情况下,libxml2会方便地替换这些实体,但在评估XPath表达式时则不会。有没有办法启用XPath替换?

(编辑:我在libxml2的documentation about entities中没有看到任何关于XPath的内容。)

(编辑:如果没有办法做到这一点,那么我会接受一个解释为什么不解释.lipxml2在其XML实现中似乎相当彻底,所以我怀疑如果不支持,要么是故意的选择,或者我的建议在某种程度上有问题。)

1 个答案:

答案 0 :(得分:2)

不,原因是XPath是在词汇上定义的,与XML无关。 XPath本身可以包含文字<&字符,而不会与XML中的特殊用途相冲突,因此XPath不需要字符实体。

在XML中使用XPath时(例如,在XSLT中),XML解析需要转义<&,并且它是提供应用程序的XML解析器(包括XPath库,带有XPath表达式的字符串值,其中字符实体扩展为其文字定义。