阅读子节点的子节点
下面我显示正常的XML文件:阅读子节点的子节点
<Header>
<Sub Name="" Value="" /Sub>
<Sub Name="" value="" /Sub>
.
.
.
.
</Header>
我读了上面提到的这样的XML:
QStringList Name;
QStringList value;
QXmlGet xmlget;
xmlget.load(Sample.xml);
xmlget.findAndDescend("Header");
while(xmlget.findNext("Sub")
{
Name.append(xmlget.getAttributeString("Name". "Unknown"));
value.append(xmlget.getAttributeString("value". "Unknown"));
}
xmlget.save(Sample.xml);
但是我现在拥有的xml有点复杂。
XML:
<Header>
<Sub Name= "" Value = ""><Sub1 Name = ""></Sub1></Sub>
<Sub Name= "" value = "" /Sub>
<Sub Name= "" Value = ""><Sub1 Name = ""></Sub1></Sub>
.
.
.
</Header>
任何建议,我怎么看<Sub1>
事情是这样的一个(!测试它的工作原理)
QStringList Name;
QStringList value;
QXmlGet xmlget;
xmlget.load("Sample.xml");
xmlget.findAndDescend("Header");
QXmlPut xmlPut(xmlget); // init reference from the variable - xmlget
while(xmlget.findNext("Sub")) {
Name.append(xmlget.getAttributeString("Name", "Unknown"));
value.append(xmlget.getAttributeString("Value", "Unknown"));
xmlget.descend(); // now Sub is the parent element
if(xmlPut.hasChildren()) {
while(xmlget.findNext("Sub1") { // finding relatively the parent - Sub
xmlPut.goTo(xmlget.element());
xmlPut.setAttributeString("Name", "NAME1");
xmlPut.setAttributeString("Value", "VALUE1");
}
} else {
xmlPut.putInt("IntTag", "IntValue"); // We create the child node (IntTag) of the parent (Sub)
xmlPut.setAttributeString("AttrName", "AttrValue"); // and add some attributes to it
}
xmlget.rise();
}
xmlPut.save("Sample.xml"); // Any file name to save the xml data
不起作用,我做了类似这样的事情。 @Alexander Chernin。因此这篇文章。你能测试一次吗? – user5820174
@ user5820174我认为这应该起作用,除了需要在顶部while循环的末尾添加对QXmlGet :: rise()的调用以便将“向上”返回到以前的位置。如果没有这个功能,当你想要更高级地寻找'Header'的childern时,你仍然在寻找'xmlget.findNext(“Sub”)'作为'Sub'的子项。 –
@code_fodder谢谢! –
获取像Xerces这样的DOM解析器并走到树上。 – duffymo
我会,但我的代码大部分是基于这个解析器,如果完全不可能做到这个命令所需的操作,我会将它更改为DOM解析器 – user5820174