Как получить все атрибуты для определенного узла xml в qt - PullRequest
1 голос
/ 10 июня 2010

возможно ли получить все атрибуты для определенного узла в pyqt?например .. рассмотрим для следующего узла:
< asset Name="3dAsset" ID="5"/>
я хочу получить строки ("Name" и "ID")
возможно ли это?

заранее спасибо

Ответы [ 3 ]

8 голосов
/ 10 июня 2010

Вы можете получить конкретное значение атрибута, используя функцию,

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

, который вернет имя атрибута. Надеюсь, это поможет.

2 голосов
/ 19 августа 2014

Как получить имя / значение первого атрибута в 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() или чем-то подобным.

0 голосов
/ 29 июля 2013

Это для с ++. Я столкнулся с той же проблемой. Вам нужно конвертировать в QDomAttr. Я уверен, что API в Python такой же.

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();
            }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...