这很奇怪,但让我尽力把它放在一起。
我有一个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的逻辑。任何人都可以帮助我吗?
更新
添加发送逻辑:
javax.jms.TextMessage tmsg = session.createTextMessage();
tmsg.setText(inp);
sender.send(tmsg);
问题 如果我从桌面读取这个xml,它会说13个孩子,6个元素节点和7个文本节点。通用逻辑是:
因此,如果我推动XML排队并将其用于执行相同的逻辑,那么上述逻辑就完全搞砸了。
OUTPUT XML ,当我从桌面读取时,它正在变好,但是从队列中读取有问题,因为它会搞乱整个树。
<Abase
xmlns="www.abc.com/Events/Abase.xsd">
<Prop>
<propName>FVer</propName>
<propName>0</propName> //similarly for other nodes
</Prop>
</Abase>
由于
答案 0 :(得分:4)
嗯,如果包含空白文本节点,则有13个子节点,但如果删除了空白文本节点,则只有6个子节点。因此,在两种情况之间构建树的方式存在一些差异,这会影响是否保留空白文本节点。
答案 1 :(得分:0)
&#34;输出XML&#34;下的文件;表示发件人方面有问题。我的猜测是,inp
不是String
,但是某种对象和setText(inp)
不会调用inp.toString()
,而是触发某种序列化代码它会产生你正在看到的奇怪的XML。