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 элементов node и 7 текстовых узлов. Общая логика:

  • Прочитайте все дочерние элементы и выполните итерацию по списку дочерних элементов.
  • Если node текст ISNOT node, войдите в блок if, добавьте один родительский элемент с двумя дочерними элементами и добавьте к существующему ROOT.Then получите NodeName и получите TextContext между элементом node и нажмите их как setTextContext для обоих дети соответственно.
  • Итак, теперь у меня есть новый ELEMENT node, у которого есть два дочерних элемента. И поскольку мне не нужен уже существующий элемент node, который по-прежнему является дочерним элементом root, Last am am их удаляет.

Итак, вышеприведенная логика все ввернута, если я нажимаю XML на очередь и занимаюсь им для выполнения той же логики.

OUTPUT XML, который приносит хорошие результаты, когда я читаю с рабочего стола, но чтение из очереди вызывает проблему, потому что оно винит полное дерево.

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

Спасибо

Ответ 1

Ну, есть 13 детей, если включены текстовые узлы с пробелами, но только 6, если опущены текстовые узлы. Таким образом, существует некоторая разница в том, как дерево было построено между двумя случаями, которое влияет на то, сохранены ли белые текстовые узлы или нет.

Ответ 2

Документ в разделе "Выходной XML" означает, что на стороне отправителя что-то не так. Я предполагаю, что inp не является String, но какой-то объект и setText(inp) не вызывает inp.toString(), а вместо этого запускает какой-то код сериализации, который создает этот нечетный XML, который вы видите.