gpt4 book ai didi

Java:解析可能不存在的XML子元素

转载 作者:行者123 更新时间:2023-11-30 08:05:25 25 4
gpt4 key购买 nike

我正在尝试从 InputStream 中提取值包含 XML 数据。一般数据布局是这样的:

<objects count="1">
<object>
<stuff>...</stuff>
<more_stuff>...</more_stuff>
...
<connections>
<connection>124</connection>
<connection>128</connection>
</connections>
</object>
<objects>

我需要找到存储在 <connection> 中的整数属性。但是,我不能保证总是有两个(可能只有一个或根本没有)。更重要的是,在某些情况下,元素 <connections>不存在。

我一直在查看类似 this 的示例,但它没有提到如何处理父级不存在的情况。

<connections>的情况根本不存在的情况非常罕见(但我绝对需要知道它何时发生),并且它确实存在但包含少于两个 <connection> 的情况的情况会更加罕见(基本上我希望它永远不会发生)。

我是否应该假设一切都已就位并在发生情况时捕获异常,或者是否有一种聪明的方法来检测 <connections> 的存在?

我最初的想法是使用类似的东西:

InputStream response = urlConnection.getInputStream();

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(response);

String xPathExpressionString = "/objects/object/connections/connection";

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
XPathExpression expr = xPath.compile(xPathExpressionString);

NodeList nodeList = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

for (int i = 0; i < nodeList.getLength(); i++) {
Node intersectionNode = nodeList.item(i);
if (intersectionNode.getNodeType() == Node.ELEMENT_NODE) { // What is this anyway?
// Do something with value
}
}

根据上面链接的示例,这应该处理不同数量的 <connection> 的情况。的,但是我该怎么处理<connections>完全失踪了。

(顺便说一句,应该始终只有一个 object ,所以无需担心)

最佳答案

使用这个 xpath 表达式:

   "//object//connection"

“//”结构是“self-or-descendants”轴的缩写形式。所以上面的表达式将选择所有 <connection>具有 <object> 的元素父级。

关于Java:解析可能不存在的XML子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31202535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com