Как передать Xml в XercesDOMParser?

Я перемещаю некоторый 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>

ПРИМЕЧАНИЕ: пожалуйста, игнорируйте пробелы в тегах

0

Решение

Строка, которую вы анализируете, содержит пробельные символы «\ n» (новая строка), «\ t» (табуляция) и «» (пробел) между тегами. Которые анализируются как текстовый узел и добавляются в дерево DOM. Это вызывает проблемы при сбросе XML. Избегайте пробелов, вы можете установить для свойства парсера includeWhiteSpace значение false

parser-> setIncludeIgnorableWhitespace (false)

Но пробелы являются «игнорируемыми», только если вы проверяете DTD или схему, которая говорит, что содержащий их элемент не принимает текст в качестве содержимого. Если вы не проверили, или если элемент был объявлен как имеющий смешанное содержимое, пробел является частью
содержание документа.

В вашем случае у вас нет проверки. Итак, что вы можете сделать, прежде чем добавить узел в качестве дочернего, выполнить итерацию по всему узлу и удалить текстовый узел (DOMNode :: TEXT_NODE), который содержит данные только на основе пробелов, табуляции и ‘/ n’. Это решит вашу проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]