2013-01-04 21 views
1

具體項目我試着去理解在XML每個產品一個「要約」。query.evaluteTo工程QStringList中而不是從XML

的結構看起來像這樣

<response> 
<results> 
    <products> 
    <product> 
    <offers> 
     <offer> 
     <offer>//HERE IS A PROBLEM 
    <product> 
    <offers> 
     <offer> 
     <offer> 

報價如下:

<offer price_retail="10.99" percent_off="23.02" merchant="101" currency_iso="USD" price_merchant="8.46" image_url_large="" description="Description " name="111 Musician's Gear T" id="2822961" url="http://specificlink.com"/> 

問題是,我可以檢索的所有值QStringList中,但 我不能做分離變量像@price_retail/string()

我會發布我的代碼:

QXmlQuery queryOffers; 
    QXmlQuery query1; 
    query1.bindVariable("mySearch", &searchXml); 
    query1.setQuery("declare variable $mySearch external;doc($mySearch)/response/results/products/product"); 

    QXmlResultItems items; 
    query1.evaluateTo(&items); 
    QXmlItem item(items.next()); 

    while(!item.isNull()) 
     { 
      query1.setFocus(item); 

      QString prodDesc; 
      query1.setQuery("@description/string()"); 
      query1.evaluateTo(&prodDesc); 

      QXmlResultItems itemsOffers; 
      query1.setQuery("offers/offer"); 
      query1.evaluateTo(&itemsOffers); 

      QXmlItem offer(itemsOffers.next()); 

      while(!offer.isNull()){ 

       QString offerUrl; 
       QString offerList; 

       queryOffers.setFocus(offer); 

        queryOffers.setQuery("@*/string()"); 
        queryOffers.evaluateTo(&offerList); 
        qDebug()<<offerList; //This returns all values 
        queryOffers.setQuery("@url/string()"); 
        queryOffers.evaluateTo(&offerUrl); 
        qDebug()<<offerUrl; //this returns empty 

       offer = itemsOffers.next(); 
      } 




      item = items.next(); 
} 

回答

2

因爲我有同樣的問題,我發現我的尋求解決這一職務。 這裏是我工作(QT5的Archlinux + KDE)

只需添加一個QXmlNamePoolQXmlQuery

QXmlNamePool m_namePool; 
    QXmlQuery queryOffers(m_namePool); 
    QXmlQuery query1(m_namePool); 

看來內部查詢(其中從QXmlItem獲取其發展論壇) 不正確設置其名稱,因此無法識別屬性名稱(在本例中爲@url)。

這可能與Qt-Doc中的要點有關,如果您希望在程序中稍後比較名稱,則應該保留在附近。