2013-06-27 3 views
0

나는 데이터라는 QByteArray에 저장 소켓을 통해 다음과 같은 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> 

를 얻을.

xml의 모든 값을 다른 변수 (일부는 정수로, QString은 일부로)로 추출하여 저장하려고합니다.

내 주요 문제는 태그 문자열 자체의 값을 가지고 <Te T210="10.00" T29="9... /> 같은 태그와 XML 문자열 사이의 값으로 <D>125</D> 같은 XML 문자열을 구분하는 방법을 잘 모릅니다이다.

내 코드는 지금까지 다음과 같습니다

+0

을 -. 대한 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(); 
} 

, 당신은 당신에게 attributes의 컨테이너 형 클래스를 줄 것이다 QXmlStreamReader::attributes를 사용해야합니다 당신의 XML의 방식에 따라

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 루프에서 QString (예 : qDebug() << x;)을 인쇄 할 수없는 이유는 무엇입니까? Qt는 x에 대해 선언 된 식별자가 없다고 말합니다. – beary

+0

변수가 범위를 벗어 났을 가능성이 있습니까? 어쩌면 Huy