在 Java 中获取特定的 XML 标签元素

getting a specific XML tag element in Java

我有以下 XML:

<oa:Parties>
  <ow-o:SupplierParty>
    <oa:PartyId>
      <oa:Id>1</oa:Id>
    </oa:PartyId>
  </ow-o:SupplierParty>
  <ow-o:CustomerParty>
    <oa:PartyId>
      <oa:Id>123-123</oa:Id> // I NEED THIS
    </oa:PartyId>
    <oa:Business>
      <oa:Id>ShiptoID</oa:Id>
    </oa:Business>
  </ow-o:CustomerParty>
</oa:Parties>

如何获得 123-123 值?

我试过这个:

NodeList nodeList = document.getElementsByTagName("ow-o:CustomerParty");
Node parentNode = nodeList.item(0);
String ID = parentNode.getTextContent();

但它有两个 <oa:Id> 个元素。

有没有办法根据层次结构找到值ow-o:CustomerParty > oa:PartyId > oa:Id

我只想对它的子项目使用一个简单的过滤器。这样

NodeList nodeList = document.getElementsByTagName("ow-o:CustomerParty");
Node parentNode = nodeList.item(0);

Node partyNode = filterNodeListByName(parentNode.getChildNodes(), "oa:PartyId");

Node idNode = null;
if(partyNode!=null)
    idNode = filterNodeListByName(partyNode.getChildNodes(), "oa:Id")

String ID = idNode!=null ? idNode.getTextContent() : "";

基本上,第一个过滤器会获取与节点名称“oa:PartiId”匹配的所有子项。然后它将找到的节点(我使用 findAny 但 findFirst 在你的情况下仍然是一个可行的选项)映射到子项节点,名称为 oa:id,文本内容为

SN:我在考虑你会定义一个这样的方法

public boolean isNodeAndWithName(Node node, String expectedName) {
    return node.getNodeType() == Node.ELEMENT_NODE && expectedName.equals(node.getNodeName());
}

这是附加方法

public Node filterNodeListByName(NodeList nodeList, String nodeName) {
        for(int i = 0; i<nodeList.getLength(); i++)
            if(isNodeAndWithName(nodeList.item(i), nodeName)
                return nodeList.item(i);
        return null;
}