这很奇怪,但让我尽力把它放在一边.
我有一个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 举报,一经查实,本站将立刻删除。