我们如何检查节点retun中的值的值,即
Hurricane&Grill; Darling Harbour
实际上,我无法用下面的代码选择撇号 存在(// ns1:name [text()=' Hurricane' s Grill Darling Harbour'])。
收到错误消息: RuntimeException:net.sf.saxon.trans.XPathException:{... name [text()=' Hurricane' s Gr ...}中第2行的char 33处的XPath语法错误:预期"]",找到姓名" s"
答案 0 :(得分:2)
我无法使用以下代码选择撇号 存在(// ns1:name [text()='Hurricane's Grill Darling Harbour'])。
获取错误消息: RuntimeException:net.sf.saxon.trans.XPathException:{... name [text()='中第2行的char 33处的XPath语法错误飓风的Gr ...}: 预期“]”,找到名字“s
在XPath 2.0中,只需将该字符加倍即可转义撇号或双引号。请参阅此处的规则[75]和[76]: http://www.w3.org/TR/xpath20/#terminal-symbols
使用强>:
exists(//ns1:name[text()='Hurricane''s Grill Darling Harbour'])
基于XSLT 2.0的验证:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="ns1">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:sequence
select="exists(//ns1:name[text()='Hurricane''s Grill Darling Harbour'])"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档:
<ns1:name xmlns:ns1="ns1">Hurricane's Grill Darling Harbour</ns1:name>
产生了想要的正确结果:
true
如果您只能在XML文档中使用XPath 1.0表达式而该字符串包含两种引号,请使用:
boolean(//ns1:name
[text()=concat('Hurricane "Mathew"', " strength's value")])
以下是基于XSLT 1.0的完整验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="ns1">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:value-of select=
"boolean(//ns1:name
[text()=concat('Hurricane "Mathew"', " strength's value")])"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档:
<ns1:name xmlns:ns1="ns1">Hurricane "Mathew" strength's value</ns1:name>
产生了想要的正确结果:
true
答案 1 :(得分:2)
Saxon 开始支持部分XPath 2.0
requeriments in 7.0
version.
SOAPUI版本5.1.2
使用 Saxon 9.1版本( Saxon 新版本的更改历史记录可以查看here)
然后,正如@DimitreNovatchev完美解释的那样,在文本中为'
转义XPath 2.0
的可能选项是将符号加倍为''
:
exists(//ns1:name[text()='Hurricane''s Grill Darling Harbour'])
我只想增加另一种可能性;由于"
引号也有效,因此您可以使用"
内部使用'
来包装整个文本。因此,在您的SOAPUI XPath match
断言中,您可以使用:
exists(//ns1:name[text()="Hurricane's Grill Darling Harbour"])
注意我的目的是这样,因为我假设您只在 XPath 中使用'
查找节点文本。如果您还需要在"
包含的文字中使用"
,则必须将"
加倍'
。
另请注意,在SOAPUI中,可以使用*
作为命名空间的通配符,以便减少表达式:
declare namespace ns='http://somenamespace/';
exists(//ns1:name[text()="Hurricane's Grill Darling Harbour"])
要:
exists(//*:name[text()="Hurricane's Grill Darling Harbour"])