DOM解析器错误的childNodes计数

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

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

  0 abc App abc Wallet 11 Ss22 Adding New cake  

读取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 ,当我从桌面读取时会很好,但是从队列中读取是有问题的,因为它会拧紧整个树。

   FVer 0 //similarly for other nodes   

谢谢

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

“输出XML”下的文档表示发送方存在问题。 我的猜测是, inp不是一个String但是某种对象和setText(inp) inp.toString() setText(inp)不会调用inp.toString() ,而是会触发某种序列化代码,从而产生你所看到的这种奇怪的XML。