阅读子节点的子节点

问题描述:

下面我显示正常的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>

+0

获取像Xerces这样的DOM解析器并走到树上。 – duffymo

+0

我会,但我的代码大部分是基于这个解析器,如果完全不可能做到这个命令所需的操作,我会将它更改为DOM解析器 – user5820174

事情是这样的一个(!测试它的工作原理)

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

+0

不起作用,我做了类似这样的事情。 @Alexander Chernin。因此这篇文章。你能测试一次吗? – user5820174

+0

@ user5820174我认为这应该起作用,除了需要在顶部while循环的末尾添加对QXmlGet :: rise()的调用以便将“向上”返回到以前的位置。如果没有这个功能,当你想要更高级地寻找'Header'的childern时,你仍然在寻找'xmlget.findNext(“Sub”)'作为'Sub'的子项。 –

+0

@code_fodder谢谢! –