如何在Qt中获取特定XML节点的所有属性

1 投票
3 回答
7944 浏览
提问于 2025-04-15 23:48

在pyqt中,能不能获取某个节点的所有属性呢?
比如说,考虑下面这个节点:
< asset Name="3dAsset" ID="5"/>
我想提取出("Name"和"ID")这两个字符串。
这可能吗?

提前谢谢你!

3 个回答

0

这是关于C++的。我遇到了同样的问题。你需要把它转换成QDomAttr。我相信在Python中API也是一样的。

if( Node.hasAttributes() )
{
    QDomNamedNodeMap map = Node.attributes();
    for( int i = 0 ; i < map.length() ; ++i )
    {
        if(!(map.item(i).isNull()))
        {
            QDomNode debug = map.item(i);
            QDomAttr attr = debug.toAttr();
            if(!attr.isNull())
            {
                cout << attr.value().toStdString();
                cout << attr.name().toStdString();
            }
    }
}
2

如何在PySide/PyQt中获取第一个属性的名称/值:

if node.hasAttributes():
    nodeAttributes = node.attributes()
    attributeItem = nodeAttributes.item(0) #pulls out first item
    attribute = attributeItem.toAttr()
    attributeName = attr.name()
    attributeValue = attr.value()

这段代码只是展示了如何获取一个名称/值对,但其实你可以很简单地通过循环来获取更多的属性,比如使用nodeAttributes.length()或者类似的方式。

9

你可以通过这个函数来获取某个属性的具体值,

QString QDomElement::attribute ( const QString & name, const QString & defValue = QString() ) const

如果你想获取所有的属性,可以使用这个,

QDomNamedNodeMap QDomElement::attributes () const

然后你需要遍历 DomNamedNodeMap,获取每个属性的值。希望这对你有帮助。

编辑:试试这个。

使用你得到的 QDomNamedNodeMap,

QDomNode QDomNamedNodeMap::item ( int index ) const

这会返回一个特定属性的 QDomNode。

接着使用,

QDomAttr QDomNode::toAttr () const

通过获得的 QDomAttr,使用这个,

QString name () const

这会返回属性的名称。希望这对你有帮助。

撰写回答