【问题标题】:QT5 C++ QByteArray XML ParserQT5 C++ QByteArray XML 解析器
【发布时间】:2013-06-25 03:16:57
【问题描述】:

我得到以下 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)。

我的主要问题是我不知道如何区分像 &lt;D&gt;125&lt;/D&gt; 这样的 xml 字符串与标签之间的值和像 &lt;Te T210="10.00" T29="9... /&gt; 这样在标签字符串本身中获得值的 xml 字符串。

到目前为止,我的代码如下所示:

QByteArray Data = socket->readAll();

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

【问题讨论】:

  • 这取决于您的 XML 方案 - 使用 readElementText() 获取元素内的文本,使用 attributes() 访问属性。

标签: c++ xml qt parsing qbytearray


【解决方案1】:

已经有很多例子了,不是吗? =(

无论如何,正如弗兰克所说,如果您想从标签中读取数据(字符),请使用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();
}

【讨论】:

  • 非常感谢!我是 qt 和 c++ 的新手。我知道有很多与此非常相似的问题,但它们仍然有点不同,我很难区分重要/不重要。反正。非常感谢!
  • 另一个问题。为什么我无法从 while 循环中打印出 QStrings(例如 qDebug()
  • 变量可能超出范围?也许你需要包括
  • 是的。已经包含:/'C2065:'estr': undeclared identifier' 我尝试qDebug() &lt;&lt; x;
  • QString x = attributes.value("X").toString(); qDebug()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
相关资源
最近更新 更多