2016-02-26 211 views
0

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

回答

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

+0

不起作用,我做了類似這樣的事情。 @Alexander Chernin。因此這篇文章。你能測試一次嗎? – user5820174

+0

@ user5820174我認爲這應該起作用,除了需要在頂部while循環的末尾添加對QXmlGet :: rise()的調用以便將「向上」返回到以前的位置。如果沒有這個功能,當你想要更高級地尋找'Header'的childern時,你仍然在尋找'xmlget.findNext(「Sub」)'作爲'Sub'的子項。 –

+0

@code_fodder謝謝! –