0

次の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>

Data と呼ばれる QByteArray に保存するソケットを介して。

xml からすべての値を抽出して、さまざまな変数 (整数として、QString として) に保存したいと考えています。

私の主な問題は<D>125</D>、タグ間の値を持つようなxml文字列と、タグ<Te T210="10.00" T29="9... />文字列自体で値を取得したようなxml文字列を区別する方法がわからないことです。

私のコードはこれまでのところ次のようになります。

QByteArray Data = socket->readAll();

QXmlStreamReader xml(Data);
while(!xml.atEnd() && !xml.hasError())
{
.....  
}
4

1 に答える 1

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を使用する必要があります

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();
}
于 2013-06-27T15:59:58.573 に答える