如何在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()" }
}
答案 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 为空,返回空字符串。
答案 2 :(得分:0)
../@id/string()
这是XPath 1.0中无效的语法。
您确定使用的是XPath 2.0引擎吗?
在XPath 1.0中使用:
string(../@id
)
或者,如果需要选择节点集的表达式,则只需使用:
../@id
答案 3 :(得分:0)
看起来您确实缺少源标记.... xml文件的位置。 虽然关于查询语法的其他讨论仍然相关。