通过Qt读取xml
Reading xml through Qt
我是Qt和XML的新手。请帮助我解决这个问题.我会对你大。这是我的 XML 文件格式
< SiteSpecific>
< SitesList>LocA;LocB;LocC< /SitesList>
< LocA>
< MaterialList>Material_A;Material_B</MaterialList>
<Material Name="Material_A">
<TemperatureList>-65;70;300;400;1000</TemperatureList>
<Density Value="0.286"/>
<PoissonRatio Value="0.27"/>
<Property tempid="01" temp="-65">
<Modulus Value="32.77E+6"/>
<Alpha Value="8.15E-6"/>
<YieldStrength Value="33.90E+3"/>
</Property>
<Property tempid="02" temp="70">
<Modulus Value="29.00E+6"/>
<Alpha Value="8.55E-6"/>
<YieldStrength Value="30.00E+3"/>
= </Property>
<Property tempid="03" temp="300">
<Modulus Value="27.50E+6"/>
<Alpha Value="9.26E-6"/>
<YieldStrength Value="22.40E+3"/>
</Property>
</Material>
</LocA>
< LocB>
< MaterialList>Material_C;Material_D</MaterialList>
<Material Name="Material_C">
<TemperatureList>-65;70;300;400;1000</TemperatureList>
<Density Value="0.286"/>
<PoissonRatio Value="0.27"/>
<Property tempid="01" temp="-65">
<Modulus Value="32.77E+6"/>
<Alpha Value="8.15E-6"/>
<YieldStrength Value="33.90E+3"/>
</Property>
<Material Name="Material_D">
<TemperatureList>-65;70;300;400;1000</TemperatureList>
<Density Value="0.286"/>
<PoissonRatio Value="0.27"/>
<Property tempid="01" temp="-65">
<Modulus Value="32.77E+6"/>
<Alpha Value="8.15E-6"/>
<YieldStrength Value="33.90E+3"/>
</Property>
</Material>
</LocB>
从上面的文件格式中,我必须提取唯物主义者(例如Material_A,Material_B,Material_C,Material_D),温度列表(例如-65,70,300,400,1000)和所有属性(模量,α和屈服强度)基于LocA和LocB的时间。
QDomDocument 和 QXmlStreamReader 是以"Qt 方式"读取 XML 文档的两种主要方式。阅读文档以获取示例和说明。
就个人而言,我更喜欢QXmlStreamReader,但它确实有一个学习曲线。
编辑:这里有一些示例代码,没有编译,给你一个大致的想法:
//create some struct to store your data
struct material_t
{
QString name;
QList<MatProp> properties; //a list of your temp-modulus-Alpha-Yield entries
}
QList<material_t> readLocation(QXmlStreamReader& xml)
{
QStringList matnames;
QList<material_t> matlist;
while(xml.readNextStartElement())
{
if(xml.name() == "MaterialList")
matnames = xml.readElementText().split(";");
else if(matnames.contains(xml.name().toString()))
matlist.append(readMaterial(xml)); //write your own reader that returns a material_t
else
xml.skipCurrentElement(); //you must skip every unwanted element
}
return matlist;
}
void readStuff(QXmlStreamReader& xml, QList<material_t>& mats)
{
while(xml.readNextStartElement())
{
QStringList sitelist;
if(xml.name() == "SitesList") //key in on the XML node name
{
sitelist = xml.readElementText().split(";");
} else if(sitelist.contains(xml.name().toString()))
{
mats.append(readLocation(xml));
} else //you have to skip every unwanted element
xml.skipCurrentElement();
}
}
int main()
{
QList<material_t> materialist;
QFile file("your path here");
if(file.open(QIODevice::Text | QIODevice::ReadOnly)) //the QIODevice must be open
{
QXmlStreamReader xml(&file);
readStuff(xml, materiallist);
}
//do stuff with materiallist
}
相关文章:
- c++ 读取 xml 文件的内容
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- 从 XML 中读取未指定结构的每个数据成员
- 使用 TinyXML2 读取 C++ 中的 XML 文件
- 我们如何重新制作程序以打开xml文件并在价格单词之后读取百分比值并更改此值
- 从路径中读取 xml
- 结束标记 xml 验证在提升 ptree 读取 xml 中不正确
- Boost Read_graphml 无法正确读取 xml,它给出了所有顶点,但它们是空的
- 通过提升从流中读取 XML 时出错
- 如何使用TinyXML从XML文件中读取所有数据
- 如何使用RapidXML读取嵌套的XML
- 读取外部文件并在类似xml的输入中分配变量
- 使用 openCV 从 xml 文件中读取和显示矩阵
- 通过Qt读取xml
- 编译C 源的问题将.OFF文件转换为XML Android OpenGL ES可读取的问题
- 如何在OpenCv中读取不同格式的XML文件
- QT XML读取器每次读取相同的标记
- Qt XML读取元素,并且只获取根
- xml读取内存 - 未知'url'参数
- C ++ Linux 库,用于创建 XML 和从 XML 读取(序列化/反序列化)