Я перемещаю некоторый DOMNode из одного документа в другой; здесь код оснастки
XercesDOMParser *parser = new XercesDOMParser;
parser->setValidationScheme(XercesDOMParser::Val_Auto);
parser->setDoNamespaces(false);
parser->setDoSchema(false);
parser->setValidationSchemaFullChecking(false);
parser->setCreateEntityReferenceNodes(false);
// getDOMNodeForXMLString will pares the string and return the root DOMNode
DOMNode* vendorExtnDomNode = getDOMNodeForXMLString(*veField,parser);
DOMNodeList* childList = vendorExtnDomNode->getChildNodes();
if(childList)
{
DOMNode* childNode = NULL;
for(childNode = vendorExtnDomNode->getFirstChild();childNode != NULL;childNode = childNode->getNextSibling())
{
DOMElement* newChild = (DOMElement*) Doc->importNode(childNode,true);
veDomNode->appendChild(newChild);
}
}
parser->resetDocumentPool();
delete parser
если строка xml похожа на приведенную ниже, она добавляется в документ
< my:root>
< my:values>
< my:value1>10< /my:value1>
< /my:values>
< /my:root>
Но если строка что-то вроде этого
< my:root>
< my:values>
< my:value1>10< /my:value1>
< my:enum>
< my:value2>10< /my:value1>
< /my:enum>
< /my:values>
< /my:root
Тогда я смог увидеть только строку иерархии первого уровня, как показано ниже на дампе XML, почему сброс отсутствует
< my:root>
< my:values>
< my:value1>10< /my:value1>
< /my:values>
< /my:root>
ПРИМЕЧАНИЕ: пожалуйста, игнорируйте пробелы в тегах
Строка, которую вы анализируете, содержит пробельные символы «\ n» (новая строка), «\ t» (табуляция) и «» (пробел) между тегами. Которые анализируются как текстовый узел и добавляются в дерево DOM. Это вызывает проблемы при сбросе XML. Избегайте пробелов, вы можете установить для свойства парсера includeWhiteSpace значение false
parser-> setIncludeIgnorableWhitespace (false)
Но пробелы являются «игнорируемыми», только если вы проверяете DTD или схему, которая говорит, что содержащий их элемент не принимает текст в качестве содержимого. Если вы не проверили, или если элемент был объявлен как имеющий смешанное содержимое, пробел является частью
содержание документа.
В вашем случае у вас нет проверки. Итак, что вы можете сделать, прежде чем добавить узел в качестве дочернего, выполнить итерацию по всему узлу и удалить текстовый узел (DOMNode :: TEXT_NODE), который содержит данные только на основе пробелов, табуляции и ‘/ n’. Это решит вашу проблему.
Других решений пока нет …