QML XmlListModel返回带有嵌套标签的0

时间:2019-05-20 12:03:11

标签: xml qt qml

我有多个XML URL,我想解析它们并将这些数据用于我的前者应用程序。

我已经可以将其用于此XML文件:

<Categories>
  <Category Name="CA" CategoryID="1"/>
  <Category Name="CB" CategoryID="2"/>
  <Category Name="CC" CategoryID="3"/>
</Categories>

为此工作的QML代码:

XmlListModel {
    id : categories

    source : xmlURL;

    query: "/Categories/Category"

    XmlRole { name: "id"; query: "string(@CategoryID)" }
    XmlRole { name: "name"; query: "string(@Name)" }
}

现在我对此尝试了相同的操作:

<Gastros>
  <Gastro GastroID="1" CreatedBy="528">
    <Tag1>100</Tag1>
    <Tag2>100</Tag2>
  </Gastro>
  <Gastro GastroID="2" CreatedBy="333">
    <Tag1>100</Tag1>
    <Tag2>100</Tag2>
  </Gastro>
</Gastros>

这是我的QML代码:

XmlListModel {
    id : gastronomyList

    source : xmlURL

    query: "/Gastros/Gastro"

    onStatusChanged : {
        console.log("Status GastroList: " + status);
        if (status === XmlListModel.Ready) {
            console.log("GastroList: " + count);

            for (var i = 0; i < count; i++) {
                console.log(get(i).id);
                console.log(get(i).createdBy);
            }
        }
    }

    XmlRole { name: "id"; query: "string(@GastroID)" }
    XmlRole { name: "createdBy"; query: "string(@CreatedBy)" }
}

在这种情况下,计数始终为0。

第一步,我想找回所有元素(在本例2中),然后在控制台中打印ID ...

1 个答案:

答案 0 :(得分:-1)

好,我知道了。

在检查器选项卡中查看页面内容(右键单击→检查元素)时,Gastro标签如下所示:

<Gastro xmlns="urn:schemas-etourist:Gastro">

这用于我的命名空间(我已经怀疑它必须对命名空间做一些事情):

namespaceDeclarations: "declare default element namespace \"urn:schemas-etourist:Gastro\";"

现在我得到了所有元素:)