QT QDomDocument读取xml格式

xml格式如下

<Skin level_count="1">
	<LOD level="0" MeshDataFile="xxxxxx.sknm" ske="xxxxxxx.skem">
		<Submeshes>
			<Submesh id="0">
				<Material shader="xxxxxxxx">
					<RenderStates/>
					<Uniforms>
						<tDiff type="Texture" TextureType="2D" sRGB="0">xxxxxxxxxxxx</tDiff>
					</Uniforms>
				</Material>
			</Submesh>
		</Submeshes>
	</LOD>
</Skin>

读取代码如下:

QFile fileReader(strUrl);
     if (!fileReader.open(QIODevice::ReadOnly))
         return;

     QDomDocument docXML;
     docXML.setContent(&fileReader);
     fileReader.close();

     QDomElement rootElement = docXML.documentElement();
     QDomElement childElement = rootElement.firstChildElement();
     if (!childElement.isNull())
     {
         qDebug("childElement node name =%s",childElement.nodeName().toStdString().c_str());

         QString MeshDataFile = childElement.attribute("MeshDataFile");
         QString ske = childElement.attribute("ske");
         qDebug("ske  =%s",ske.toStdString().c_str());
         qDebug("MeshDataFile  =%s",MeshDataFile.toStdString().c_str());

         QDomElement threeElement= childElement.firstChildElement();
         if (!threeElement.isNull())
         {
             qDebug("threeElement node name =%s",threeElement.nodeName().toStdString().c_str());

             QDomElement FourElement= threeElement.firstChildElement();
             if (!FourElement.isNull())
             {
                 qDebug("FourElement node name =%s",FourElement.nodeName().toStdString().c_str());

                 QDomElement FiveElement= FourElement.firstChildElement();
                 if (!FiveElement.isNull())
                 {
                     qDebug("FiveElement node name =%s",FiveElement.nodeName().toStdString().c_str());
                     if(FiveElement.nodeName()=="Material")
                     {
                         QString shader = FiveElement.attribute("shader");

                         QDomNamedNodeMap attributeMap = FiveElement.attributes();
                         int nSize = attributeMap.count();
                         for(int n=0;n<nSize;n++)
                         {
                             QDomNode attribute = attributeMap.item(n);
                             qDebug("attribute node name =%s",attribute.nodeName().toStdString().c_str());
                         }
                         //再往下一级就是纹理
                         QDomNodeList listChild = FiveElement.childNodes();
                         int iChildSize = listChild.size();
                         for(int k = 0; k < iChildSize; k++)
                         {
                              QDomNode itemChild = listChild.at(k);
                              qDebug("itemChild node name =%s",itemChild.nodeName().toStdString().c_str());
                              if(itemChild.nodeName()=="Uniforms")
                              {
                                  QDomElement itemUniforms= itemChild.toElement();
                                  QDomElement itemUniformsChild= itemUniforms.firstChildElement();
                                  QString type = itemUniformsChild.attribute("type");
                                  QString TextureType = itemUniformsChild.attribute("TextureType");
                                  QString typeget = itemUniformsChild.attribute("type");
                                  QString sRGB = itemUniformsChild.attribute("sRGB");
                                  QString valueUrl = itemUniformsChild.text();
                                  qDebug("valueUrl  =%s",valueUrl.toStdString().c_str());

                                  break;
                              }
                         }

                     }
                 }
             }
         }

     }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将XML文件读取到QDomDocument对象中,可以使用QXmlStreamReader类和QDomDocument类。以下是一个简单的例子: ```cpp #include <QFile> #include <QXmlStreamReader> #include <QDomDocument> QFile file("example.xml"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QXmlStreamReader xmlReader(&file); QDomDocument domDocument; while (!xmlReader.atEnd()) { xmlReader.readNext(); if (xmlReader.isStartElement()) { QDomElement element = domDocument.createElement(xmlReader.name().toString()); domDocument.appendChild(element); if (xmlReader.attributes().count() > 0) { for (int i = 0; i < xmlReader.attributes().count(); i++) { QDomAttr attr = domDocument.createAttribute(xmlReader.attributes().at(i).name().toString()); attr.setValue(xmlReader.attributes().at(i).value().toString()); element.setAttributeNode(attr); } } } else if (xmlReader.isCharacters()) { QDomText text = domDocument.createTextNode(xmlReader.text().toString()); domDocument.lastChild().appendChild(text); } else if (xmlReader.isEndElement()) { domDocument.removeChild(domDocument.lastChild()); } } if (xmlReader.hasError()) return; file.close(); ``` 在这个例子中,我们打开一个XML文件,并且创建一个QXmlStreamReader对象来读取该文件。然后,我们创建一个QDomDocument对象来存储XML文件的内容。我们使用while循环来遍历XML文件中的所有元素,属性和文本节点。在循环中,我们检查当前节点的类型,并根据需要创建QDomElement,QDomAttr和QDomText对象,并将它们添加到QDomDocument对象中。最后,我们检查是否有任何错误,并关闭文件。 注意:这个例子只是一个简单的例子,如果XML文件非常大或者非常复杂,可能需要使用更复杂的算法来读取和解析XML文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值