如何在XercesDOMParser中传递Xml
How to pass Xml in XercesDOMParser?
本文关键字:Xml XercesDOMParser 更新时间:2023-10-16
我正在将一些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>
注意:请忽略标签
您正在分析的字符串在标记之间包含空格字符'n'(新行(、'\t'(制表符(和''(空格(。它们被解析为文本节点并附加到DOM树中。这会导致转储xml时出现问题。避免空白-您可以将解析器属性includeWhiteSpace设置为false
解析器->setIncludeIgnorableWhitespace(false(
但是,只有当您根据DTD或模式进行验证时,空白才是"可忽略的",DTD或模式表示包含空白的元素不接受文本作为内容。如果您还没有进行验证,或者元素被声明为具有混合内容,那么空格就是文档的内容。
在您的情况下,您没有进行验证检查。因此,您可以做的是,在将节点附加为子节点之前,遍历所有节点,并删除仅具有基于空白、tab和'/n'的数据的文本节点(DOMNode::text_node(。这将解决你的问题。
相关文章:
- Cppcheck生成xml转储文件
- 如何在pugixml中获取节点的内部XML
- 如何使用tinyxml2从XML加载父实体和子实体
- boost xml parsingl将xml的路径作为变量发送
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 使用 Tinyxml 在 xml 中添加一个子子项
- 增强基于 XML class_id的反序列化
- 在 c++ 中使用 vtd-xml 时,如何摆脱 EOFException?
- 防止在C++中选择错误文件时提升 xml 解析器崩溃
- c++ 读取 xml 文件的内容
- 删除 XML 文件中的子节点C++
- 使用 RapidXML 更新C++中的 XML 节点和属性值
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- 从 XML 中读取未指定结构的每个数据成员
- XML to XML XSLT transformation. MSXML in VBScript
- 将 QGraphicsView 或 Scene 转换为 XML/JSON
- Qt 写入 xml: QIODevice::write (QFile, "D:/logs.xml" ): 设备未打开
- 使用 libxml2 解析 XML 文件时缺少元素值
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 如何在XercesDOMParser中传递Xml