假设我们有以下XML文档:
<root>
<options>
...
</options>
<children>
<child name="first">12345</child>
<child name="second">
<additionalInfo>abcd</additionalInfo>
</children>
</root>
Run Code Online (Sandbox Code Playgroud)
我想获得"子"节点的字符串表示并将它们附加到数组中(我不想丢失XML语法,所以.text()不是一个选项).例如,第一个孩子看起来像:
QString child = "<child name="first">12345</child>";
Run Code Online (Sandbox Code Playgroud)
我使用以下代码来获取元素:
QDomDocument doc;
QDomElement element;
element = xml->documentElement();
if(element.isNull() == false)
{
element = element.firstChildElement("children");
if(element.isNull()) return;
element = element.firstChildElement("child");
while(element.isNull() == false)
{
doc = element.toDocument();
if(doc.isNull() == false)
{
// save string into array
array.append(doc.toString());
}
element = element.nextSiblingElement("child");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是doc.isNull总是返回false(看起来我无法将元素转换为文档).有什么方法可以执行此操作吗?
编辑:
我想补充说QString在这里不是强制性的.基本上任何可以在以后用于检索数据的类都可以(我将保存这些节点并使用它们稍后初始化其他对象).重要的是,即使原始文档被销毁,我也应该能够访问这些值.例如,可以将这些元素直接存储到某个数组(例如QList),以后可以用它来访问它们.
Rou*_*uta 16
我将为自己的问题添加一个答案.不知道为什么,但看起来我错过了文档中的以下功能.
void QDomNode :: save(QTextStream&str,int indent)const
它几乎完成了将节点转换为字符串所需的全部内容,例如:
QString str;
QTextStream stream(&str);
QDomNode node = xml->documentElement().firstChildElement("child");
node.save(stream, 4 /*indent*/);
// process str
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11540 次 |
| 最近记录: |