2017-08-02 80 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