使用xerces读取XML:获取<nodename type =“typeName”> </nodename>的类型

时间:2012-03-12 22:27:19

标签: c++ xml xerces-c

我正在使用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)

但不知道如何做后半部分。

3 个答案:

答案 0 :(得分:0)

DOMNode::getNodeType不是“获取名为type的属性并将其作为字符串返回的简写。”它完全符合它的说法:检索DOM节点的DOM类型。 DOM节点是类型化对象:元素,文本,属性,处理指令,注释,CDATA等。

DOM节点的DOM类型 nothing 与恰好存储在元素节点的type属性中的内容有关。这是为了您自己,使用常规属性访问语法。

答案 1 :(得分:0)

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

如果这不是您的选项,您需要保留用于加载XML的(DOM)解析器,并且还可以访问在验证文件时从架构生成的语法...最后更多的努力。

编辑:好的,看了问题的标题后,如果你只想获得type属性或模式类型,我会更加困惑......但是,如果你想获得属性的访问权限,请使用{ {3}}然后getAttributes获取您要查找的属性。

答案 2 :(得分:0)

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

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