无法使用包含编码特殊字符的xpath获取数据

时间:2014-10-07 16:28:31

标签: xml xpath

以下是我的xml结构。

<City name="BELLMORE" >
  <SiteName name="MILL POND AUTO BODY" >
    <SiteStreet>3000 Merrick Rd</SiteStreet>
    <ZipCode>11710</ZipCode>
  </SiteName>
  <SiteName name="STS TIRE &amp; 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&#39;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&#39;S AUTO']/SiteStreet/text()

它不返回任何东西。我已经转换了xml中的特殊字符。

1 个答案:

答案 0 :(得分:1)

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&apos;S AUTO"]' />
<xsl:value-of select="//City[@name=&quot;BELLMORE&quot;]/SiteName[@name=&quot;PERRY'S AUTO&quot;]" />

表达式本身仍包含各种单引号和双引号字符,但这些字符的表示方式取决于主语言。