读取子节点的子节点

时间:2016-02-26 10:11:36

标签: c++ xml qt

下面我展示了一个普通的XML文件:



<Header>
  <Sub Name="" Value="" /Sub>
  <Sub Name="" value="" /Sub>
  .
  .
  .
  .
</Header>
&#13;
&#13;
&#13;

我像这样读了上面提到的XML:

&#13;
&#13;
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);
&#13;
&#13;
&#13;

但我现在拥有的xml有点复杂。

XML:

&#13;
&#13;
<Header>
  <Sub Name= "" Value = ""><Sub1 Name = ""></Sub1></Sub>
  <Sub Name= "" value = "" /Sub>
  <Sub Name= "" Value = ""><Sub1 Name = ""></Sub1></Sub>
   .
   .
   .
</Header>
&#13;
&#13;
&#13;

任何建议如何阅读<Sub1>

1 个答案:

答案 0 :(得分:0)

像这样的东西(经过测试!它有效!)

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

docs