2011-09-21 20 views
2

如何在qml/qt的xpath查詢中獲取當前項目的父項? fn:parent()沒有實施,../是的,但不適用於我。 看起來像focus問題。在qml/qt中使用xpath的父項目

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

這裏有一個bug報告:https://bugreports.qt-project.org/browse/QTBUG-17588 – fejd

回答

0

嘗試這個XPath:

../@id 

string(object?)函數轉換的對象爲字符串如下:

  • 節點集通過返回的 字符串值在節點集是第一按文檔順序的節點轉換爲字符串。如果 節點集爲爲空,則返回空的字符串。

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

+0

'@ id/string()'部分是正確的,問題只發生在'.. /' – Giovanni

+0

@Giovanni,你試過'../@id'嗎?它返回什麼? –

+0

還有一個空字符串 – Giovanni

0
../@id/string() 

這是XPath 1.0中無效語法。

您確定您使用的是XPath 2.0引擎嗎?

在XPath 1.0使用

string(../@id

或者,如果需要,其選擇節點集合的表達,然後簡單地使用:

../@id 
+0

qml文檔說它是2.0,但1.0或2.0解決方案都不能工作... – Giovanni

+0

你是什麼意思「既不工作」?XPath表達式在語法上是有效的並且評估爲想要的字符串。如果某些「不起作用」,那麼它就像您使用評估這些XPath表達式的結果一樣。 –

+0

是他們在qml/qt引擎中實現的方式,我認爲 – Giovanni

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()" } 
} 
0

它確實顯示你缺少源標籤.... xml文件的位置。 儘管關於查詢語法的其他討論仍然相關。