【问题标题】:Reading XML with xerces: Getting type where <nodeName type="typeName">使用 xerces 读取 XML:获取类型 where <nodeName type="typeName">
【发布时间】:2012-03-12 22:27:18
【问题描述】:

我正在使用 xerces-c-3.1.1 将 xml 文件读入 C++ 程序。

我找到了一个类型为 aNode 的节点

DOMNode*       aNode;

并且可以使用获取节点名称

name=aNode->getNodeName();

但是当我尝试使用时

type=aNode->getNodeType();

要获取类型,返回的类型是一个整数:ELEMENT_NODE。

如果有人能告诉我如何编写代码来判断一个节点的名称是否为“nodeName”和类型是否为“typeName”,我将不胜感激。我知道如何使用

来完成前一部分
if(wcscmp(name, L"nodeName")==0)

但不知道后半部分怎么做。

【问题讨论】:

  • 我修正了你的格式。请点击“编辑”按钮查看它是如何完成的以供将来参考(另请参阅编辑器中的帮助链接)。

标签: c++ xml xerces-c


【解决方案1】:

DOMNode::getNodeType 不是“获取名为type 的属性并将其作为字符串返回”的简写。它正如它所说的那样:检索 DOM 节点的 DOM 类型。 DOM 节点是类型化对象:元素、文本、属性、处理指令、cmets、CDATA 等。

DOM 节点的 DOM 类型与恰好存储在元素节点的 type 属性中的内容无关。那是你自己得到的,使用常规的属性访问语法。

【讨论】:

    【解决方案2】:

    我猜你想要 XML 实例模式中的类型。在使用 Xerces 解析文件时获取类型信息比在 XML 已经被解析并作为 DOM 树可用之后更容易。如果这是您的选择,请查看此处:get-schema-data-types-from-xerces 链接中的答案描述了如何在使用 Xerces SAX 解析器解析文件时访问模式类型。

    如果这不适合您,您需要保留用于加载 XML 的 (DOM) 解析器,并访问在验证文件时从模式生成的语法...最后更多的努力。

    编辑:好的,在查看问题的标题后,如果您只想获取类型属性或模式类型,我会更加困惑......但是,如果您想访问属性,只需使用 @ 987654322@ 然后getNamedItem 获取您要查找的属性。

    【讨论】:

      【解决方案3】:

      您需要将名称从 XMLStr 转换为 char*

      char* temp2 = XMLString::transcode(aNode->getNodeName());
      std::cout << "The current node name is " << temp2 << std::endl;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-19
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多