什么是
tinyxml2 (v2) 替代 v1 的 TiXmlNode 枚举?
TinyXML v1可以切换节点类型,但如何使用TinyXML v2的XMLNode做同样的事情。
switch (node->Type()) // v1 node type selector
{
case TiXmlNode::DOCUMENT:
wcout << L"Hello Document";
break;
基
类XMLNode
包含许多虚拟转换方法,这些方法返回NULL
或0
,除非节点实际上是指定的类型。
例如,如果你在实际上是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) {
...
}