私はこのような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();
}
}