1

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();
}
4

1 に答える 1

2

私は同じ問題を抱えていたので、解決策を探しているときにこの投稿を見つけました。これが私にとってうまくいったものです(QT5 Archlinux + KDE)

QXmlNamePoolに aを追加するだけQXmlQueryです:

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

内部クエリ (QXmlItem から fokus を取得) が名前を正しく設定していないようで、属性名 (この場合は @url) を認識していません。

QXmlNamePoolプログラムの後半で名前を比較したい場合は、Qt-Doc のポイントに関係している可能性があります。

于 2015-02-10T17:51:46.297 に答える