xpathGetString总是返回空字符串

时间:2017-08-02 13:11:33

标签: java docx4j

我正在尝试使用xpathGetString

从CustomXmlPart读取属性
String abcd = lc_CustomXmlPart.xpathGetString( "/Contract/Currency[1]/@Code", "" );
System.out.println( abcd );

但它总是返回空字符串。

Xml看起来像这样:

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

有人可以告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分: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。