带有qpath / qt中xpath的父项

时间:2011-09-21 11:08:16

标签: xml qt xpath qml

如何在qml / qt的xpath查询中获取当前项的父项? 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 个答案:

答案 0 :(得分:1)

源标记在哪里告诉模型从哪里获取查询? 您需要声明源,您的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()" }
}

答案 1 :(得分:0)

试试这个XPath:

../@id
  

string(object?) 函数将对象转换为字符串,如下所示:

     
      
  • 通过返回字符串值将节点集转换为字符串   节点集中的节点,该节点是文档顺序中的第一个节点。如果   node-set 为空,返回字符串。
  •   

参考:http://www.w3.org/TR/xpath/#section-String-Functions

答案 2 :(得分:0)

../@id/string()

这是XPath 1.0中无效的语法

您确定使用的是XPath 2.0引擎吗?

在XPath 1.0中使用

string(../@id

或者,如果需要选择节点集的表达式,则只需使用:

../@id

答案 3 :(得分:0)

看起来您确实缺少源标记.... xml文件的位置。 虽然关于查询语法的其他讨论仍然相关。