2013-06-27 38 views
0

我得到以下XMLQT5 C++的QByteArray XML解析器

<Tra Type="SomeText"> 
    <tr>Abcdefghij qwertzu</tr> 
    <Rr X="0.0000" Y="0.0000" Z="0.0000" A="0.0000" B="0.0000" C="0.0000" /> 
    <Ar A1="0.0000" A2="0.0000" A3="0.0000" A4="0.0000" A5="0.0000" A6="0.0000" /> 
    <Er E1="0.0000" E2="0.0000" E3="0.0000" E4="0.0000" E5="0.0000" E6="0.0000" /> 
    <Te T21="1.09" T22="2.08" T23="3.07" T24="4.06" T25="5.05" T26="6.04" T27="7.03" T28="8.02" T29="9.01" T210="10.00" /> 
    <D>125</D> 
    <IP></IP> 
</Tra> 

通過將其保存在一個QByteArray中名爲Data的插座。

我想提取並保存每個值從xml到不同的變量(一些整數一些QString的)。

我的主要問題是,我不知道如何區分像<D>125</D>這樣的xml字符串,其值與標籤和xml字符串之間的值相似,如<Te T210="10.00" T29="9... />,它獲得了標籤字符串本身的值。

我的代碼看起來像這樣至今:

+0

這取決於該計劃爲XML - 使用readElementText()爲元素內的文本,以及用於訪問屬性的attributes()。 –

回答

0

只是有這樣的例子很多已經,不是嗎? =(

反正,就像弗蘭克說,如果你想從標籤中讀取數據(字符) - 使用QXmlStreamReader::readElementText

或者,你可以這樣做:

QXmlStreamReader reader(xml); 
while(!reader.atEnd()) 
{ 
    if(reader.isStartElement()) 
    { 
    if(reader.name() == "tr") 
    { 
     reader.readNext(); 

     if(reader.atEnd()) 
     break; 

     if(reader.isCharacters()) 
     { 
     // Here is the text that is contained within <tr> 
     QString text = reader.text().toString(); 
     } 
    } 
    } 

    reader.readNext(); 
} 

的屬性,你應該使用QXmlStreamReader::attributes,這將給你一個容器類型的類attributes

QXmlStreamReader reader(xml); 
while(!reader.atEnd()) 
{ 
    if(reader.isStartElement()) 
    { 
    if(reader.name() == "Rr") 
    { 
     QXmlStreamAttributes attributes = reader.attributes(); 
     // This doesn't check if the attribute exists... just a warning. 
     QString x = attributes.value("X").toString(); 
     QString y = attributes.value("Y").toString(); 
     QString a = attributes.value("A").toString(); 
     // etc... 
    } 
    } 

    reader.readNext(); 
} 
+0

非常感謝!我是新來的QT和C + +。我知道有很多類似的問題,但他們仍然有點不同,我很難區分重要/不重要。無論如何。大thx! – beary

+0

另一個問題。爲什麼我不能在while循環中打印出QStrings(例如qDebug()<< x;)? Qt說,沒有聲明x的標識符。 – beary

+0

可能該變量已超出範圍?也許你需要包括 Huy