Тип QML XmlListModel
Для задания только для чтения модели, используя выражения XPath Подробнее...
| Оператор импорта: | import QtQuick.XmlListModel 2.0 |
Свойства
- count : int
- namespaceDeclarations : string
- progress : real
- query : string
- roles : list<XmlRole>
- source : url
- status : перечисление
- xml : string
Методы
- void errorString()
- object get(int index)
- void reload()
Подробное описание
Для использования этого элемента необходимо импортировать модуль с помощью следующей строки:
import QtQuick.XmlListModel 2.0
XmlListModel используется для создания модели только для чтения из XML-данных. Он может использоваться в качестве источника данных для элементов представления (таких как ListView, PathView, GridView) и других элементов, которые взаимодействуют с данными модели (таких как Repeater).
Например, если существует XML-документ по адресу http://www.mysite.com/feed.xml, например:
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
...
<channel>
<item>
<title>A blog post</title>
<pubDate>Sat, 07 Sep 2010 10:00:01 GMT</pubDate>
</item>
<item>
<title>Another blog post</title>
<pubDate>Sat, 07 Sep 2010 15:35:01 GMT</pubDate>
</item>
</channel>
</rss> XmlListModel может создать модель из этих данных, как показано ниже:
import QtQuick 2.0
import QtQuick.XmlListModel 2.0
XmlListModel {
id: xmlModel
source: "http://www.mysite.com/feed.xml"
query: "/rss/channel/item"
XmlRole { name: "title"; query: "title/string()" }
XmlRole { name: "pubDate"; query: "pubDate/string()" }
} Значение query "/rss/channel/item" указывает, что XmlListModel должен генерировать элемент модели для каждого <item> в XML-документе.
Объекты XmlRole определяют атрибуты элемента модели. Здесь каждый элемент модели будет иметь атрибуты title и pubDate, которые соответствуют значениям title и pubDate соответствующего <item>. (См. XmlRole::query для получения дополнительных примеров допустимых выражений XPath для XmlRole.)
Модель может быть использована в ListView, как показано ниже:
ListView {
width: 180; height: 300
model: xmlModel
delegate: Text { text: title + ": " + pubDate }
} Данные XmlListModel загружаются асинхронно, и status устанавливается в XmlListModel.Ready при завершении загрузки. Обратите внимание, что это означает, что когда XmlListModel используется для представления, представление не заполняется до тех пор, пока модель не загрузится.
Использование ключевых XML-ролей
Вы можете определить некоторые роли как «ключи», чтобы при вызове reload() модель добавляла и обновляла только данные, содержащие новые значения для этих ключей.
Например, если вышеуказанная роль для «pubDate» была определена так:
XmlRole { name: "pubDate"; query: "pubDate/string()"; isKey: true } Тогда при вызове reload() модель будет добавлять и перезагружать элементы с значением «pubDate», которое еще не присутствует в модели.
Это полезно при отображении содержимого XML-документов, которые обновляются постепенно (например, RSS-каналы), чтобы избежать перерисовки всего содержимого модели в представлении.
Если задано несколько ключевых ролей, модель добавляет и перезагружает только элементы с комбинированным значением всех ключевых ролей, которые еще не присутствуют в модели.
См. также Демонстрация Qt Quick — RSS News.
Документация свойств
count : int
Количество записей данных в модели.
namespaceDeclarations : string
Объявления имен пространств, которые будут использоваться в запросах XPath.
Пространства имен должны быть объявлены как в XQuery. Например, если запрашиваемый документ по адресу http://mysite.com/feed.xml использует пространство имен "http://www.w3.org/2005/Atom", это может быть объявлено как пространство имен по умолчанию:
XmlListModel {
source: "http://mysite.com/feed.xml"
query: "/feed/entry"
namespaceDeclarations: "declare default element namespace 'http://www.w3.org/2005/Atom';"
XmlRole { name: "title"; query: "title/string()" }
} progress : real
Это указывает на текущий прогресс загрузки источника данных XML. Это значение находится в диапазоне от 0,0 (данные не загружены) до 1,0 (все данные загружены). Если данные XML не из удаленного источника, прогресс становится 1,0 сразу же после чтения данных.
Обратите внимание, что когда прогресс равен 1,0, данные XML были загружены, но еще не загружены в модель на данном этапе. Используйте свойство status, чтобы узнать, когда данные XML были прочитаны и загружены в модель.
query : string
Абсолютный запрос XPath, представляющий базовый запрос для создания элементов модели из объектов XmlRole этой модели. Запрос должен начинаться с '/' или '//'.
roles : list<XmlRole>
Роли, которые будут доступны для этой модели.
source : url
Расположение источника данных XML.
Если оба source и xml заданы, используется xml.
status : перечисление
Указывает статус загрузки модели, который может быть одним из следующих:
- XmlListModel.Null — Данные XML не заданы для этой модели.
- XmlListModel.Ready — Данные XML загружены в модель.
- XmlListModel.Loading — Модель загружает данные XML.
- XmlListModel.Error — Во время загрузки модели произошла ошибка. Подробности об ошибке см. в errorString().
См. также progress.
xml : string
Это свойство содержит данные XML для этой модели, если они заданы.
Текст предполагается кодированным в UTF-8.
Если оба source и xml заданы, используется xml.
Документация методов
void errorString()
Возвращает строку с описанием последней ошибки, которая произошла, если status равен XmlListModel::Error.
object get(int index)
Возвращает элемент в модели по индексу index.
Например, для модели, подобной этой:
XmlListModel {
id: model
source: "http://mysite.com/feed.xml"
query: "/feed/entry"
XmlRole { name: "title"; query: "title/string()" }
} Это позволит получить значение title для первого элемента в модели:
var title = model.get(0).title;
void reload()
Перезагружает модель.
Если ключевые роли не заданы, все существующие данные модели удаляются, и модель создается заново.
В противном случае элементы добавляются только в том случае, если модель уже не содержит элементов с соответствующими значениями ключевых ролей.
См. также Использование ключевых XML-ролей и XmlRole::isKey.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qml-qtquick-xmllistmodel-xmllistmodel.html