c++ - tinyxml2 相当于 TiXmlNode 枚举?

标签 c++ xml-parsing tinyxml tinyxml2

v1 的 TiXmlNode 枚举的tinyxml2 (v2) 替代品是什么?
TinyXML v1 可以切换节点类型,但是如何使用 TinyXML v2 的 XMLNode 进行同样的操作。

switch (node->Type()) // v1 node type selector
{
    case TiXmlNode::DOCUMENT:
        wcout << L"Hello Document";
    break;

最佳答案

基类XMLNode包含许多虚拟转换方法,除非节点实际上属于指定类型,否则它们返回NULL0 .

例如,如果您对实际上是 XMLText 的内容调用 ToText(),您将获得有效的 XMLText* 结果,否则您将得到 NULL

以下是可用的方法(在 XMLNode 中):

/// Safely cast to an Element, or null.
virtual XMLElement* ToElement() {
    return 0;
}
/// Safely cast to Text, or null.
virtual XMLText* ToText() {
    return 0;
}
/// Safely cast to a Comment, or null.
virtual XMLComment* ToComment() {
    return 0;
}
/// Safely cast to a Document, or null.
virtual XMLDocument* ToDocument() {
    return 0;
}
/// Safely cast to a Declaration, or null.
virtual XMLDeclaration* ToDeclaration() {
    return 0;
}
/// Safely cast to an Unknown, or null.
virtual XMLUnknown* ToUnknown() {
    return 0;
}

我不知道为什么要这样做;也许类型枚举在实践中没有那么有用,或者它可能是为了支持内部 XMLHandle 类(它实现所有这些强制转换方法)。要转换您的代码,您可以这样做:

switch (node->Type()) {
    case TiXMLNode::DOCUMENT:
        ...
        break;
    case TiXMLNode::TEXT:
        ...
        break;
    ...
}

进入此:

XMLDocument *doc = node->ToDocument();
if (doc) {
    ...
}
XMLText *text = node->ToText();
if (text) {
    ...
}

关于c++ - tinyxml2 相当于 TiXmlNode 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848609/

相关文章:

c++ - 如何将多个 QJsonObject 添加到 QJsonDocument - Qt

android - 解析 Android Manifest 文件以使用 python 查找 uses-permission 标签

sql-server - 解析SSIS包

c++ - 为字符串分配内存时获取 SIGSEGV/SIGABRT

c++ - OpenCV idft() 和 MATLAB ifft2 的结果不匹配

c++ - 创建 2d unordered_map C++

android - 如何使用 gradle 获取 AndroidManifest 属性

c++ - C++ 中的 XML 序列化/反序列化

c++ - TinyXML 无法将属性与字符进行比较

c++ - tinyXml如何添加一个元素