【问题标题】:XPath Expression -fails in Chrome But works in IE,FFXPath 表达式 - 在 Chrome 中失败但在 IE、FF 中有效
【发布时间】:2012-08-14 05:49:34
【问题描述】:

我有一个这样的 XML:

<root>
 <parent1>
   <parent2>
     <child label="single'quote"/>
     <child label="double&quot;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=&amp;quot;single'quote&amp;quot;],如果 xpath 位于使用“”的属性中)。
  • @DevNull 在这种情况下它会失败, //child[@label="double"quote"] :(
  • 正确,但 XPath 将更改为 //child[@label='double&amp;quot;quote']。我错过了什么?
  • 我正在使用 javascript 来处理 XML。因此,我会将 XPath 作为字符串存储在变量中。因此,它将是单引号或双引号。怎么能变??比如:evaluate("//child[@label=\""+labelVariable+"\"]",....,...)
  • @DevNull 抱歉,我没有看到编辑。那个表达失败了。它没有返回值为 double"quote 的节点:(

标签: internet-explorer firefox google-chrome xpath cross-browser


【解决方案1】:

使用

/*/parent1/parent2/*[@label="single'quote"]

这是使用 XPath Visualizer 执行的评估的屏幕截图:

第二个问题使用

/*/parent1/parent2/*[@label='double"quote']

这是 XPath Visualizer 的屏幕截图:

【讨论】:

  • 是的,没错。谢谢 :) 但是我将通过简单地替换值来对两个表达式使用相同的字符串。喜欢:var childvalue = "single'quote"; var expression = "/*/parent1/parent2/*[@label=\""+childvalue+"\"]"; 我怎样才能在这里解决它。 :(
  • @Sowmiya,这特定于您正在使用的 PL——而不是 XPath。研究您的编程语言,了解生成该字符串的方式。如果遇到问题,可以随时调试程序。
  • 是的。非常感谢。:) 顺便说一句,知道为什么 XPath 表达式 ` //child[@label=//parent1/@dummy] ` 仅在 Chrome 浏览器中会失败吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多