2011-02-16 18 views
2

我正在嘗試使用QXmlQuery對聲明瞭默認命名空間的文檔執行XQuery表達式。如何在使用QXmlQuery(Qt XQuery)時綁定命名空間前綴?

爲了討論:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns="http://namespace.com/ns1"> 
    <node1 attr1="hi"/> 
</root> 

現在,我有以下兌文檔打開和查詢:

QFile temp("my.xml"); 
temp.open(QIODevice::ReadOnly | QIODevice::Text); 

QXmlQuery query; 
query.setFocus(&temp); 

QXmlResultItems items; 
query.setQuery("/root"); 

query.evaluateTo(&items); 

在運行此,「項目」從來沒有在它的數據,自文檔是命名空間的。當然,如果我刪除默認的名稱空間聲明,'items'確實具有正確的數據,但我沒有那麼奢侈。

我試圖改變查詢:「/前綴:根」,和Qt吠叫報警,如:

No namespace binding exists for the prefix prefix in prefix:root

所以命名空間的結合確實存在!但是哪裏?我看到QXmlNamePool,但它沒有mutator方法。我可以創建一個QXmlName從池查詢ala:

QXmlName name(query.namePool(), "prefix", "http://namespace.com/ns1"); 

但它不會改變任何東西。我很茫然,我用過的其他工具包有簡單的方法將前綴綁定到名稱空間URI。

回答

3

我相信如果你將你的查詢更改爲

... 
QXmlResultItems items; 
query.setQuery("declare default element namespace \"http://namespace.com/ns1\"; /root"); 
... 

它應該返回的數據。

希望這會有所幫助,關心

+1

這是行得通!這在Qt中是絕對可怕的API,但它很有用。謝謝! – 2011-02-16 03:10:43