首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中获取特定的XML标记元素

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

Stack Overflow用户
提问于 2021-06-25 06:07:49
回答 1查看 50关注 0票数 0

我有以下XML:

代码语言:javascript
复制
<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值?

我试过这个:

代码语言:javascript
复制
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找到值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 08:20:12

我只是在它的子项上使用了一个简单的过滤器。这边请

代码语言:javascript
复制
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:我正在考虑你会这样定义一个方法

代码语言:javascript
复制
public boolean isNodeAndWithName(Node node, String expectedName) {
    return node.getNodeType() == Node.ELEMENT_NODE && expectedName.equals(node.getNodeName());
}

这是另一种方法

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68123227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档