gpt4 book ai didi

java - JDOM getChildren() 返回空列表

转载 作者:行者123 更新时间:2023-11-29 03:42:18 24 4
gpt4 key购买 nike

这是我的 xml:

例子:

<?xml version="1.0" encoding="UTF_8" standalone="yes"?>
<StoreMessage xmlns="http://www.xxx.com/feed">
<billingDetail>
<billingDetailId>987</billingDetailId>
<contextId>0</contextId>
<userId>
<pan>F0F8DJH348DJ</pan>
<contractSerialNumber>46446</contractSerialNumber>
</userId>
<declaredVehicleClass>A</declaredVehicleClass>
</billingDetail>
<billingDetail>
<billingDetailId>543</billingDetailId>
<contextId>0</contextId>
<userId>
<pan>F0F854534534348DJ</pan>
<contractSerialNumber>4666546446</contractSerialNumber>
</userId>
<declaredVehicleClass>C</declaredVehicleClass>
</billingDetail>
</StoreMessage>

使用 JDOM 解析器我想得到所有 <billingDetail>来自它的 xml 节点。

我的代码:

SAXBuilder builder = new SAXBuilder();
try {
Reader in = new StringReader(xmlAsString);
Document document = (Document)builder.build(in);
Element rootNode = document.getRootElement();
List<?> list = rootNode.getChildren("billingDetail");

XMLOutputter outp = new XMLOutputter();
outp.setFormat(Format.getCompactFormat());

for (int i = 0; i < list.size(); i++) {

Element node = (Element)list.get(i);

StringWriter sw = new StringWriter();
outp.output(node.getContent(), sw);
StringBuffer sb = sw.getBuffer();

String text = sb.toString();
xmlRecords.add(sb.toString());
}

} catch (IOException io) {
io.printStackTrace();
} catch (JDOMException jdomex) {
jdomex.printStackTrace();
}

但我从来没有得到像字符串这样的输出 xml 节点:

<billingDetail>
<billingDetailId>987</billingDetailId>
<contextId>0</contextId>
<userId>
<pan>F0F8DJH348DJ</pan>
<contractSerialNumber>46446</contractSerialNumber>
</userId>
<declaredVehicleClass>A</declaredVehicleClass>
</billingDetail>

我做错了什么?我怎样才能用 JDOM 解析器得到这个输出?

编辑

为什么 XML 以

开头

<StoreMessage>而不是像 <StoreMessage xmlns="http://www.xxx.com/MediationFeed">

然后工作?这怎么可能?

最佳答案

问题是 getChildren 方法有两个版本:

java.util.List getChildren(java.lang.String 名称) 这将返回直接嵌套(一层深)在此元素内的所有子元素的列表,这些子元素具有给定的本地名称并且不属于任何 namespace ,作为 Element 对象返回。

java.util.List getChildren(java.lang.String name, Namespace ns) 这将返回一个列表,其中包含直接嵌套在该元素内(一层深)的具有给定本地名称并属于给定命名空间的所有子元素,作为 Element 对象返回。

如果第一个节点属于命名空间,则找不到您的节点,您应该使用第二个。

关于java - JDOM getChildren() 返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12582044/

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