我必须使用以下格式解析xml文件:
<FirstTag>
<SecondTag>
<Attribute value="hello"/>
</SecondTag>
</FirstTag>
现在这就是我所拥有的:
QDomNode n = domElem.firstChild();
while(!n.isNull()){
QDomElement e = n.toElement();
if(!e.isNull()){
if(e.tagName() == "FirstTag"){
//secondtag???
}
}
n = n.nextSibling();
}
现在我的实际问题: 我想从SecondTag访问一个属性,如何访问它,因为它是FirstTag中的一个子标签,我无法在当前循环中访问它。
答案 0 :(得分:0)
不要这样做。首先使用documentElement()然后(在返回的对象上)使用elementsByTagName()搜索嵌套元素。
答案 1 :(得分:0)
看起来您已经错过了QDomNode有子节点和函数childNodes()来获取节点的子节点。
因此,如果QDomNode n指向第一个元素,而不是只查找第一个Child,则获取每个元素的子节点,检查正确的节点名称,然后检查每个子节点的子节点。要获取属性,您可以执行以下操作: -
QString attribValue;
QDomNodeList children = n.childNodes();
QDomNode childNode = children.firstChild();
while(!childNode.isNull())
{
if(childNode.nodeName() == "Attribute")
{ // there may be multiple attributes
QDomNamedNodeMap attributeMap = node.attributes();
// Let's assume there is only one attribute this time
QDomAttr item = attributeMap.item(0).toAttr();
if(item.name() == "value")
{
attribValue = item.value(); // which is the string "hello"
}
}
}
这可以通过递归函数为每个节点及其子节点完成。
答案 2 :(得分:0)
这是非常简单的XML文档,所以试试这个。此代码可以随意使用
QDomDocument doc("mydocument");
QFile f("G:/x.txt");
if (!f.open(QIODevice::ReadOnly))
qDebug() <<"fail";
if (!doc.setContent(&f)) {
f.close();
qDebug() <<"fail";
}
f.close();
QDomElement domElem = doc.documentElement();//FistTag here
QDomNode n = domElem.firstChild();//seconTag here
QDomElement e = n.toElement();
if(!e.isNull()){
n = n.firstChild();//now it is attribute tag
e = n.toElement();
qDebug() << e.attribute("value") <<"inside" << e.tagName();
}
输出:"hello" inside "Attribute"