2017-08-02 100 views
0

我試圖使用xpathGetStringxpathGetString總是返回空字符串

String abcd = lc_CustomXmlPart.xpathGetString("/Contract/Currency[1]/@Code", ""); 
System.out.println(abcd); 

從CustomXmlPart讀取屬性,但它總是返回空字符串。

XML看起來是這樣的:

<Contract xmlns="http://abc.123.cz" TypeCode="HO" IssueDate="2017-02-11"> 
    <Currency Code="EUR" Name="Default" PrintCode="€"></Currency> 
</Contract> 

有人能告訴我什麼我做錯了?

回答

0

的XML定義了一個默認的命名空間(xmlns)和你想訪問其節點,而不指定命名空間。

您可以將您的XPath改爲任何名稱空間的訪問節點:

XPath 1.0中
  • /*[local-name()='Contract']/*[local-name()='Currency'][1]/@Code

  • 了XPath 2.0

    /*:Contract/*:Currency/@Code

但是,這將是最好的指定它:

String abcd = lc_CustomXmlPart.xpathGetString("/abc:Contract/abc:Currency[1]/@Code", "xmlns:abc=\"http://abc.123.cz\""); 

我不知道確切的語法,請檢查您的API文檔;我敢肯定的是,有一種方法可以指定您可以在XPath中使用的前綴映射。

注意,有可能是指定的XPath查詢默認命名空間,這將導致同樣的結果(選擇特定的命名空間的節點),而不必修改您的XPath的方式。

+0

非常感謝你! –

+0

@PiotrJanuszWijas不客氣!我記得頭刮,因爲偷偷摸摸'xmlns'的一些長會議;) – Aaron

+0

您可能還可以在XML聲明命名空間前綴(例如:的xmlns:ABC =「http://abc.123.cz」 ),然後根據此答案使用該前綴。 – JasonPlutext