我有一个这样的 XML 文档
<root>
<stuff>
<data foo="bar">
<name>barf</name>
<value>123</value>
</data>
<!-- ... --->
</stuff>
</root>
并希望通过树递归以从中获取所有信息,例如
data bar
name barf
value 123
但是,DomElement::text()也返回子元素的文本内容,即data
元素的“barf 123”
我发现一些相当紧凑的代码可以通过 DOM 进行递归:
void MyClass::TraverseXmlNode(const QDomNode& node)
{
QDomNode domNode = node.firstChild();
QDomElement domElement;
while(!(domNode.isNull()))
{
if(domNode.isElement())
{
domElement = domNode.toElement();
if(!(domElement.isNull()))
{
qDebug() << __FUNCTION__ << "" << domElement.tagName() << domElement.text();
}
}
TraverseXmlNode(domNode);
domNode = domNode.nextSibling();
}
}