我正在将一些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字符串如下所示,则它会附加到Doc
< 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 :(得分:0)
要解析的字符串包含空格字符'\ n'(新行),'\ t'(制表符)和标记之间的''(空格)。哪些被解析为文本节点并附加到DOM树。这会导致转储xml的问题。请避免使用空格,将解析器属性includeWhiteSpace设置为false
parser-&gt; setIncludeIgnorableWhitespace(false)
但是如果您正在验证DTD或模式,即包含它们的元素不接受文本作为内容,那么空格只是“可忽略”。如果您尚未验证,或者该元素被声明为具有混合内容,则该空格是其中的一部分 文件的内容。
在您的情况下,您没有验证检查。所以你可以做的就是在将node添加为child之前,遍历所有节点并删除只有基于空格,tab和'/ n'的数据的文本节点(DOMNode :: TEXT_NODE)。这将解决您的问题。