解析XML文件时显示其中的一部分

时间:2010-04-12 12:05:14

标签: xml string qt parsing tostring

考虑以下XML文件:

<cookbook>
<recipe xml:id="MushroomSoup">
    <title>Quick and Easy Mushroom Soup</title>
    <ingredient name="Fresh mushrooms"
                quantity="7"
                unit="pieces"/>
    <ingredient name="Garlic"
                quantity="1"
                unit="cloves"/>
</recipe>
<recipe xml:id="AnotherRecipe">
    <title>XXXXXXX</title>
    <ingredient name="Tomatoes"
                quantity="8"
                unit="pieces"/>
    <ingredient name="PineApples"
                quantity="2"
                unit="cloves"/>
</recipe>
</cookbook>

假设我要解析这个文件并将每个配方收集为XML,每个配方都是一个独立的QString。

例如,我想要一个包含以下内容的QString:

<recipe xml:id="MushroomSoup">
    <title>Quick and Easy Mushroom Soup</title>
    <ingredient name="Fresh mushrooms"
                quantity="7"
                unit="pieces"/>
    <ingredient name="Garlic"
                quantity="1"
                unit="cloves"/>
</recipe>

我怎么能这样做?你们知道一种快速而干净的方法吗?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

每个QDomNode都有

void QDomNode::save ( QTextStream & str, int indent) const

方法,QTextStream有

QString * string () const

所以,您只需使用这些方法,并获得简单,代码页感知和灵活的代码(QDomNode和QTextStream都是非常强大的类型)。

您可以使用firstChildElement(name)/ nextSiblingElement(name)遍历具有特定名称的元素,或者您可以获取配方的根元素并编写foreach(QDomNode节点,root.childNodes())或smth。有很多方法可以在Qt中使用Xml。看看Trolls提供的教程。

答案 1 :(得分:0)

Qt支持SAX和DOM。只需写一个查询。 Here is a tutorial.