【发布时间】:2012-08-14 05:49:34
【问题描述】:
我有一个这样的 XML:
<root>
<parent1>
<parent2>
<child label="single'quote"/>
<child label="double"quote"/>
</parent2>
<parent3/>
<parent4>
<child label = "single'quote"/>
</parent4>
</parent1>
</root>
我的目标是选择具有特定标签的子节点,比如 single'quote
我可以使用 XPath 表达式,
//child[@label='single'quote']
这显然会因为值中的特殊字符 ' 而引发错误。
我想出了一个使用逻辑的解决方案:
给父节点设置一个属性dummy和label的值,比较两个属性。 [将 dummy="single'quote" 添加到 parent1 节点。]
因此,我们可以使用以下方法读取标签为“单引号”的子节点:
//child[@label=//parent1/@dummy]
虽然它在 IE 和 Firefox9 中运行良好,但在 Chrome21 中却失败了。
逻辑有问题吗?如何更正 Chrome 的表达式?
非常感谢。
【问题讨论】:
-
为什么不能直接使用
//child[@label="single'quote"]? (或//child[@label=&quot;single'quote&quot;],如果 xpath 位于使用“”的属性中)。 -
@DevNull 在这种情况下它会失败, //child[@label="double"quote"] :(
-
正确,但 XPath 将更改为
//child[@label='double&quot;quote']。我错过了什么? -
我正在使用 javascript 来处理 XML。因此,我会将 XPath 作为字符串存储在变量中。因此,它将是单引号或双引号。怎么能变??比如:evaluate("//child[@label=\""+labelVariable+"\"]",....,...)
-
@DevNull 抱歉,我没有看到编辑。那个表达失败了。它没有返回值为 double"quote 的节点:(
标签: internet-explorer firefox google-chrome xpath cross-browser