gpt4 book ai didi

java - DOM 解析器错误的 childNodes 计数

转载 作者:数据小太阳 更新时间:2023-10-29 02:06:12 27 4
gpt4 key购买 nike

这很奇怪,但让我尽力把它说清楚。

我有一个 XML,我正在通过正常方式从桌面读取它并通过 DOM 解析器解析它。

<?xml version="1.0" encoding="UTF-8"?>
<Abase
xmlns="www.abc.com/Events/Abase.xsd">
<FVer>0</FVer>
<DV>abc App</DV>
<DP>abc Wallet</DP>
<Dversion>11</Dversion>
<sigID>Ss22</sigID>
<activity>Adding New cake</activity>
</Abase>

读取 XML 以获取 child 。

Document doc = docBuilder.parse("C://Users//Desktop//abc.xml");
Node root = doc.getElementsByTagName("Abase").item(0);
NodeList listOfNodes = root.getChildNodes(); //Sysout Prints 13

所以我的逻辑在这里运作良好。当我尝试通过将相同的 XML 推送到队列并读取它并获取子节点时,它给了我否。子节点数为 6。

Document doc=docBuilder.parse(new InputSource(new ByteArrayInputStream(msg.getBytes("UTF-8"))));
Node root = doc.getElementsByTagName("Abase").item(0);
NodeList listOfNodes = root.getChildNodes(); //Sysout Prints 6

这搞砸了我解析 XML 的逻辑。任何人都可以帮助我吗?

更新

添加发送逻辑:

javax.jms.TextMessage tmsg = session.createTextMessage();
tmsg.setText(inp);
sender.send(tmsg);

问题 如果我从桌面读取此 xml,它会显示 13 个子节点、6 个元素节点和 7 个文本节点。通用逻辑是:

  • 读取所有子项并遍历子项列表。
  • 如果节点 ISNOT 文本节点进入 if block ,添加一个父元素和两个子元素并追加到现有 ROOT。然后获取 NodeName 并获取元素节点之间的 TextContext 并将它们分别推送为两个子元素的 setTextContext。
  • 所以我现在有一个新的元素节点,它有两个子节点。因为我现在不需要已经存在的元素节点,它们仍然是根的子节点,所以我最后删除了它们。

因此,如果我将 XML 推送到队列并为执行相同的逻辑而重新加载它,那么上述逻辑就完全搞砸了。

OUTPUT XML 当我从桌面读取时它很好,但是从队列读取有问题,因为它搞砸了整个树。

<Abase
xmlns="www.abc.com/Events/Abase.xsd">
<Prop>
<propName>FVer</propName>
<propName>0</propName> //similarly for other nodes
</Prop>
</Abase>

谢谢

最佳答案

好吧,如果包含空白文本节点,则有 13 个子节点,但如果删除空白文本节点,则只有 6 个子节点。因此,这两种情况在构建树的方式上存在一些差异,这会影响是否保留空白文本节点。

关于java - DOM 解析器错误的 childNodes 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30940162/

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