c++ - xerces - 处理标签名称中的命名空间

标签 c++ xml xsd xml-namespaces xerces-c

我有一个基于 XSD 的 XML,看起来像这样:

<ns1:root xmlns:ns1="ROOT_NAMESPACE">
    <ns1:thing1>abc</ns1:thing>
    <ns1:thing2>def</ns1:thing>
</ns1:root>

我使用的是 C++,我可以成功读取 XML 并对其进行解析。但是我想使用不带命名空间的标签名称获取我的元素,例如 thing1thing2,但目前看来我需要它,例如 ns1:thing1。 (我正在尝试使用 getElementsByTagName 方法。)如何让解析器忽略命名空间?

我的解析器设置是:

myParser.setValidationScheme(XercesDOMParser::Val_Always);
myParser.setExternalSchemaLocation(xsdLocation);
myParser.setDoNamespace(true);
myParser.setDoSchema(true);
myParser.setValidationSchemaFullChecking(true);

最佳答案

您必须创建一个新文档并在没有命名空间的情况下重建整个 xml 树!递归遍历树并仅使用忽略前缀的 getLocalName() 方法构建新元素应该很容易。

关于c++ - xerces - 处理标签名称中的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33423557/

相关文章:

xslt - 具有不同属性和元素的相同元素名称的 XML 模式

java - 查找 (x,y) 坐标之间的最大距离

c++ - 为什么 vector::push_back 和 emplace_back 调用 value_type::constructor 两次?

java - 谷歌面试问题

c# - 目标项目没有 app.config 时的 NuGet app.config XDT

c# - 如何使用 XPathSelectElement 提取元素

c++ - 如何更改 shared_ptr 中的指针而不失去删除内存的能力?

php - 如何使用 PHP 的 DOM 解析器从 XML 中提取节点属性

html - 在 HTML 页面中使用引文本体

xml - 使用XSD验证XML……但仍然允许扩展