2014-10-07 168 views
1

以下是我的xml結構。無法使用包含編碼特殊字符的xpath獲取數據

<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

的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;]" /> 

表達式本身仍含有各種單,雙引號字符,但如何這些字符表示取決於主機語言。

+0

非常感謝你... – 2014-10-07 16:59:09

+0

這個解決方案是否適用於所有特殊字符? – 2014-10-07 17:03:17

+0

@VimalPatel對XPath 1.0中字符串文字的唯一限制是單引號文字不能包含單引號,而雙引號文字不能包含雙引號,但除此之外什麼都行。在XPath 2.0中,你可以通過加倍的方式來轉義定界引用類型 - 'PERRY'的'AUTO'代表字符串'PERRY'S AUTO',但是1.0沒有轉義機制,所以你必須用'concat ()'如果你想在同一個字符串中包含兩種類型的引用。 – 2014-10-07 17:05:35