Java中如何按层级路径精准获取XML指定标签的文本值
问题原因
你调用parentNode.getTextContent()时,会返回当前节点下所有后代节点的文本内容拼接结果,因此会把<ow-o:CustomerParty>下两个<oa:Id>的文本全部合并返回,不符合需求。
解决方案
有两种常用实现方式,都可以满足你按ow-o:CustomerParty > oa:PartyId > oa:Id层级路径查找的需求:
方法1:DOM逐层遍历查找
通过元素节点的getElementsByTagName方法逐层筛选子节点,代码如下:
// 1. 获取根下的ow-o:CustomerParty节点 NodeList customerPartyList = document.getElementsByTagName("ow-o:CustomerParty"); Node customerPartyNode = customerPartyList.item(0); if (customerPartyNode.getNodeType() == Node.ELEMENT_NODE) { Element customerPartyEle = (Element) customerPartyNode; // 2. 从CustomerParty下获取oa:PartyId节点 NodeList partyIdList = customerPartyEle.getElementsByTagName("oa:PartyId"); Element partyIdEle = (Element) partyIdList.item(0); // 3. 从oa:PartyId下获取oa:Id节点,取文本 NodeList idList = partyIdEle.getElementsByTagName("oa:Id"); String targetId = idList.item(0).getTextContent().trim(); // 此时targetId值为123-123 }
方法2:XPath直接查询(更简洁)
如果需要处理更复杂的层级筛选,直接用XPath路径表达式查询即可,代码更短:
XPath xpath = XPathFactory.newInstance().newXPath(); // 直接写层级路径表达式 String xpathExp = "//ow-o:CustomerParty/oa:PartyId/oa:Id/text()"; String targetId = xpath.evaluate(xpathExp, document).trim();
注意:如果项目开启了XML命名空间严格校验,需要额外实现
NamespaceContext接口绑定命名空间前缀和URI,未开启校验的场景下以上代码可直接运行。
内容的提问来源于stack exchange,提问作者A.J
相关产品推荐
相关产品推荐

