Родительский элемент с xpath в qml / qt - PullRequest
2 голосов
/ 21 сентября 2011

Как получить родительский элемент для текущего элемента в запросе xpath в qml / qt? fn:parent() не реализовано, ../ да, но у меня не работает. Похоже, focus проблема.

xml пример:

<groups>
  <group id="A">
    <item>bla</item>
    <item>blah</item>
  </group>
  <group id="B">
    <item>bla</item>
    <item>blah</item>
  </group>
  <group id="C">
    <item>bla</item>
    <item>blah</item>
  </group>
</groups>

Следующий XmlRole возвращает пустую строку:

XmlListModel {
  query: "/groups/group/item"
  XmlRole { name: "group_id"; query: "../@id/string()" }
}

Ответы [ 4 ]

1 голос
/ 17 апреля 2012

Где находится исходный тег, который сообщает модели, откуда взять запрос?Вам нужно объявить источник, ваше свойство ID находится за пределами узла.И должен объявить используемое пространство имен (например, http://www.w3.org/2005/Atom). Так что я думаю, что ваш код должен выглядеть так:

XmlListModel {
  query: "/groups/group/"
  namespaceDeclarations: "declare namespace group=\"http://www.w3.org/2005/Atom/\";"
  source: "url of your xml file"
  XmlRole { name: "group_id"; query: "../@id/string()" }
}
0 голосов
/ 26 июля 2013

Похоже, что вам не хватает исходного тега .... расположение файла XML. Хотя другое обсуждение синтаксиса запроса по-прежнему актуально.

0 голосов
/ 21 сентября 2011
../@id/string()

Это недопустимый синтаксис в XPath 1.0 .

Вы уверены, что используете движок XPath 2.0?

В XPath 1.0 используйте:

string(../@id)

Или, если требуется выражение, которое выбирает набор узлов, просто используйте:

../@id
0 голосов
/ 21 сентября 2011

Попробуйте этот XPath:

../@id

Функция string(object?) преобразует объект в строку следующим образом:

  • Набор узлов преобразуется в строку, возвращая строковое значение узел в наборе узлов, который является первым в порядке документа. Если набор узлов равен пусто , возвращается строка пусто .

Ссылка: http://www.w3.org/TR/xpath/#section-String-Functions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...