我正在使用下面的xml结构并阅读 GUID
价值来自 Address
节点在哪里 UsageCode
值设置为“标准”。代码运行良好,但现在 AddressUsage
段由源系统重新定义为可选,因此 UsageCode
不是全部返回 Address
xml中的节点。
<BusinessPartner>
<ID>2494271</ID>
<Address>
<GUID>000d8a5c-8bc5-1eda-b8cc-53078a383c3f</GUID>
<ValidityPeriod>
<StartDate>2020-08-06</StartDate>
<EndDate>9999-12-31</EndDate>
</ValidityPeriod>
</Address>
<Address>
<GUID>000d8a5c-8bc5-1eda-b8cc-53078a384c5f</GUID>
<ValidityPeriod>
<StartDate>2020-08-06</StartDate>
<EndDate>9999-12-31</EndDate>
</ValidityPeriod>
<AddressUsage>
<UsageCode>STANDARD</UsageCode>
</AddressUsage>
</Address>
</BusinessPartner>
上面的xml可以有多个 Address
段,和 AddressUsage
节点是可选的。由于失踪 AddressUsage
节点此代码现在返回错误 GUID
(从一开始) Address
节点)。
有什么建议可以解决这个问题吗?
// Get Document Builder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// Build Document
Document document = builder.parse(new File("BPData2.xml"));
// Normalize the XML Structure;
document.getDocumentElement().normalize();
NodeList AddList = document.getElementsByTagName("AddressUsage");
for (int i = 0; i < AddList.getLength(); i++) {
NodeList AddChildList = AddList.item(i).getChildNodes();
for (int j = 0; j < AddChildList.getLength(); j++) {
Node UsageChildNode = AddChildList.item(j);
if ("UsageCode".equals(UsageChildNode.getNodeName()) &&
"STANDARD".equals(AddChildList.item(j).getTextContent())) {
NodeList AddUUID = document.getElementsByTagName("GUID");
System.out.println(AddUUID.item(i).getTextContent());
break;
}
}
}
1条答案
按热度按时间hrysbysz1#
UsageCode
是您感兴趣的标记,因此获取这些元素,而不是AddressUsage
. 对于每个元素,检查其文本内容是否为“标准”,如果是,则获取祖父母节点,即Address
元素。然后遍历Address
直到你找到GUID
. 获取的文本内容GUID
你就完了。注意,上面的代码是基于您的问题中的示例xml的。