无法使用包含编码特殊字符的xpath获取数据
问题描述:
以下是我的xml结构。无法使用包含编码特殊字符的xpath获取数据
<City name="BELLMORE" >
<SiteName name="MILL POND AUTO BODY" >
<SiteStreet>3000 Merrick Rd</SiteStreet>
<ZipCode>11710</ZipCode>
</SiteName>
<SiteName name="STS TIRE & AUTO CENTERS" >
<SiteStreet>CHG Sunrise Hwy</SiteStreet>
<ZipCode>11710</ZipCode>
</SiteName>
<SiteName name="AUTO CONNECTION" >
<SiteStreet>2860 Sunrise Hwy</SiteStreet>
<ZipCode>11710</ZipCode>
</SiteName>
<SiteName name="PERRY'S AUTO" >
<SiteStreet>1703 Newbridge Rd</SiteStreet>
<ZipCode>11710</ZipCode>
</SiteName>
</City>
我能够在使用以下xpath查询时查找数据。
//City[@name='BELLMORE']/SiteName[@name='AUTO CONNECTION']/SiteStreet/text()
但是,当我使用以下XPath查询
//City[@name='BELLMORE']/SiteName[@name='PERRY'S AUTO']/SiteStreet/text()
它不返回任何东西。我已经在xml中转换了特殊字符。
答
的XPath看到解析XML,所以你需要检查的实际字符,而不是字符引用:
//City[@name="BELLMORE"]/SiteName[@name="PERRY'S AUTO"]
XPath字符串字面量可以用单或者双引号分隔,如果要包括字面上的单引号字符,那么它必须用双引号分隔。
当你看到在使用另一种主机语言(如Java或XSLT)编写的源代码中使用XPath表达式的例子时,其中构成XPath表达式的字符受制于引用规则的主机语言。例如,在Java中的上述表达可能是这样的:
String xpath = "//City[@name=\"BELLMORE\"]/SiteName[@name=\"PERRY'S AUTO\"]";
或者在XSLT它可能看起来像任何一种:
<xsl:value-of select='//City[@name="BELLMORE"]/SiteName[@name="PERRY'S AUTO"]' />
<xsl:value-of select="//City[@name="BELLMORE"]/SiteName[@name="PERRY'S AUTO"]" />
表达式本身仍含有各种单,双引号字符,但如何这些字符表示取决于主机语言。
非常感谢你... – 2014-10-07 16:59:09
这个解决方案是否适用于所有特殊字符? – 2014-10-07 17:03:17
@VimalPatel对XPath 1.0中字符串文字的唯一限制是单引号文字不能包含单引号,而双引号文字不能包含双引号,但除此之外什么都行。在XPath 2.0中,你可以通过加倍的方式来转义定界引用类型 - 'PERRY'的'AUTO'代表字符串'PERRY'S AUTO',但是1.0没有转义机制,所以你必须用'concat ()'如果你想在同一个字符串中包含两种类型的引用。 – 2014-10-07 17:05:35