XPATH查询中的html 4.0实体

时间:2010-01-15 20:17:06

标签: xpath

我不确切知道xpath表达式的原因:

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

不匹配:

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

这看起来是对的吗?如何查询该标记?

2 个答案:

答案 0 :(得分:4)

XPath没有定义任何特殊的转义序列。当在XSLT中使用XPath时(例如,在XSLT文档的元素的属性中),转义序列由读取样式表的XML处理器处理。如果您通过库在非XML上下文中使用XPath(例如,从Java或C#或其他语言),并且您的XPath查询是该语言的字符串文字,除了语言本身之外,您将不会获得任何转义处理通常会。

如果这是C#或Java,这应该有效:

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

作为旁注,它在XSLT中也不起作用,因为XSLT使用XML,它没有定义字符实体&rsaquo; - 它只定义&lt;&gt;&quot;&apos;&amp;。您必须使用&#x8250;,或者在XSLT样式表的DOCTYPE声明中自己定义字符实体。

答案 1 :(得分:1)

来自XPath specification

  

XPath操作XML文档的抽象逻辑结构,而不是表面语法

...所以除非你在里面使用查询(而不是“查询”)一种解析该实体的语言(也许XSLT带有包含该实体的DTD(如果可能的话,我远离XSLT)专家)),我不希望它起作用。

使用您使用XPath的任何语言识别的文字字符或转义序列。