使用XPath从XML获取元素值

时间:2017-12-11 15:41:53

标签: java xml xpath xml-parsing

我有这样的XML文件:

login

我想访问schemeID =“schema = 2”值。我尝试XPath和document.getElementsByTagName。我可以使用document.getElementsByTagName访问元素,因为是多个我无法访问我想要的元素。当我尝试使用XPath时,我无法访问XML中的任何元素。

这是我的XPath实现:

<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents- xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 UBL-Invoice-2.1.xsd">
<cac:AccountingSupplierParty>
<cac:Party>
  <cac:PartyIdentification>
    <cbc:ID schemeID="schema1">123231123</cbc:ID>
  </cac:PartyIdentification>
  <cac:PartyIdentification>
    <cbc:ID schemeID="schema2">2323232323</cbc:ID>
  </cac:PartyIdentification>
  <cac:PartyIdentification>
    <cbc:ID schemeID="schema3">4442424</cbc:ID>
  </cac:PartyIdentification>
  <cac:PostalAddress>
    <cbc:CityName>İstanbul</cbc:CityName>
    <cac:Country>
      <cbc:Name>Turkey</cbc:Name>
    </cac:Country>
  </cac:PostalAddress>
</cac:Party>
</cac:AccountingSupplierParty>
</Invoice>

binaryXmlData是我的XML的源代码。首先,我将base64binary数据转换为xml。我做错了转换或者我的xpath实现是错误的吗?

1 个答案:

答案 0 :(得分:3)

您的代码和XML存在许多问题,包括:

  1. 您的XML格式不正确。 cbc的结束语 命名空间前缀丢失。
  2. 您的Java代码从不定义NamespaceContext
  3. 另请参阅 How does XPath deal with XML namespaces?