1

我有一个像这样的XML:XPath表达式-fails在Chrome但在IE工程,FF

<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'] 

这显然会抛出,因为在价值特殊字符“的错误。

我想出了一个解决方案中使用的逻辑:

设置属性虚设与标签的值的父节点,并比较这两个属性。 [新增虚拟= “single'quote”parent1节点]

所以,我们可以与标签为 “single'quote” 读子节点使用:

//child[@label=//parent1/@dummy] 

虽然它在IE和Firefox9中运行得非常好,但在Chrome21中却失败了。

逻辑有什么缺陷吗?我如何纠正Chrome的表达式?

非常感谢。

+0

为什么你就不能使用'//子[@标签= “single'quote”]'? (或'//子[@ label = " single'quote "]'如果xpath在属性中使用了“) – 2012-08-14 06:04:00

+0

@DevNull在这种情况下失败// child [@ label =”double " quote“ ]:( – Sowmiya 2012-08-14 06:12:47

+0

@DextOr;)哎呀。 – Sowmiya 2012-08-14 06:14:24

回答

1

使用

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

这里是与XPath的展台进行评价的屏幕截图:

enter image description here

对于第二个问题使用

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

下面是从展台的XPath截屏:

enter image description here

+0

是的,没错。谢谢:)但是我只是通过简单地替换这个值来为这两个表达式使用相同的字符串。像: 'var childvalue =“single'quote”; var expression =“/ */parent1/parent2/* [@ label = \”“+ childvalue +”\“]”;' 我该如何解决这个问题。 :( – Sowmiya 2012-08-16 05:19:06

+0

@Sowmiya,这是针对您正在使用的PL而不针对XPath的。研究您的编程语言以获得可以生成该字符串的方式。如果遇到问题,您可以随时调试您的程序。 – 2012-08-16 11:50:11

+0

是的,谢谢很多。:) 顺便说一句,任何想法为什么XPath表达式'// child [@label = // parent1/@ dummy] '仅在Chrome浏览器中失败? – Sowmiya 2012-08-17 04:25:56

相关问题