微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – DOM Parser错误的childNodes计数

这很奇怪,但让我尽力把它放在一边.

我有一个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以获取孩子.

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的逻辑.任何人都可以帮助我吗?

UPDATE

添加发送逻辑:

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

问题
 如果我从桌面读取这个xml,它会说13个孩子,6个元素节点和7个文本节点.通用逻辑是:

>读取所有子项并遍历子项列表.
>如果节点ISNOT文本节点进入if块,则添加一个带有两个子元素的父元素并附加到现有ROOT.然后获取NodeName并在元素节点之间获取TextContext并分别将它们作为setTextContext推送给两个子节点.
>所以我现在有一个新的ELEMENT NODE,它有两个孩子.因为我现在不需要现有的元素节点,它们仍然是root的子节点,最后正在删除它们.

因此,如果我将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个子节点.因此,在两种情况之间构建树的方式存在一些差异,这会影响是否保留空白文本节点.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。