0
<code> 
        For Each oXElement In oXDocument.Descendants("searchResult")
              sTitle = oXElement.Element("title").Value
        Next
</code>

私も試しました:

<code> 
       For Each oXElement In oXDocument.Elements(searchResults) 
           sTitle = oXElement.Element("title").Value 
        Next
</code>

XDocument ノードと通信する方法を理解するだけでなく、ノードを取得するのにも問題があります。

私の究極の目標は、すべての Ebay 要素の属性から Ebay オブジェクト モデルを作成することです。そのためには、何らかの方法で XML タグを参照する必要があります。ここで、この XML 応答の解析を進めるためのアドバイスやサンプル例をいただければ幸いです。

助けてくれてありがとう。

PS: 同様の質問を検索したところ、同じ種類の質問がいくつか見つかりましたが、それでも解析を機能させることができませんでした。

<findItemsByProductResponse xmlns="http://www.ebay.com/marketplace/search/v1/services">
  <ack>Success</ack>
  <version>1.12.0</version>
  <timestamp>2013-06-02T22:42:04.500Z</timestamp>
  <searchResult count="5">
    <item>
      <itemId>370821427802</itemId>
      <title>
Modern Database Management 11E by Hoffer, Ramesh, Topi 11th (Int'l Edition)
</title>
      <globalId>EBAY-US</globalId>
      <primaryCategory>
        <categoryId>2228</categoryId>
        <categoryName>Textbooks, Education</categoryName>
      </primaryCategory>
      <galleryURL>
http://thumbs3.ebaystatic.com/m/meSAqCRbXecSjZjO1833dWQ/140.jpg
</galleryURL>
      <viewItemURL>
http://www.ebay.com/itm/Modern-Database-Management-11E-Hoffer-Ramesh-Topi-11th-Intl-Edition-/370821427802?pt=US_Texbook_Education
</viewItemURL>
      <productId type="ReferenceID">143649496</productId>
      <paymentMethod>PayPal</paymentMethod>
      <autoPay>true</autoPay>
      <location>Malaysia</location>
      <country>MY</country>
      <shippingInfo>
        <shippingServiceCost currencyId="USD">0.0</shippingServiceCost>
        <shippingType>Free</shippingType>
        <shipToLocations>Worldwide</shipToLocations>
        <expeditedShipping>true</expeditedShipping>
        <oneDayShippingAvailable>false</oneDayShippingAvailable>
        <handlingTime>1</handlingTime>
      </shippingInfo>
      <sellingStatus>
        <currentPrice currencyId="USD">54.07</currentPrice>
        <convertedCurrentPrice currencyId="USD">54.07</convertedCurrentPrice>
        <sellingState>Active</sellingState>
        <timeLeft>P20DT10H47M20S</timeLeft>
      </sellingStatus>
      <listingInfo>
        <bestOfferEnabled>false</bestOfferEnabled>
        <buyItNowAvailable>false</buyItNowAvailable>
        <startTime>2013-05-24T09:25:25.000Z</startTime>
        <endTime>2013-06-23T09:29:24.000Z</endTime>
        <listingType>StoreInventory</listingType>
        <gift>false</gift>
      </listingInfo>
      <returnsAccepted>true</returnsAccepted>
      <condition>
        <conditionId>1000</conditionId>
        <conditionDisplayName>Brand New</conditionDisplayName>
      </condition>
      <isMultiVariationListing>false</isMultiVariationListing>
      <topRatedListing>true</topRatedListing>
    </item>
    <item>...</item>
    <item>...</item>
    <item>...</item>
    <item>...</item>
  </searchResult>
  <paginationOutput>
    <pageNumber>1</pageNumber>
    <entriesPerPage>5</entriesPerPage>
    <totalPages>3</totalPages>
    <totalEntries>14</totalEntries>
  </paginationOutput>
  <itemSearchURL>
http://www.ebay.com/ctg/143649496?LH_BIN=1&_ddo=1&_incaucbin=0&_ipg=5&_pgn=1
</itemSearchURL>
</findItemsByProductResponse>
4

2 に答える 2

0

2つのこと。まず、90% の人々が LINQ to XML の使用に問題を抱えているという罠に陥りました。名前空間を忘れました。C# または VB で動作する以下を使用できます。

Dim ns = XNamespace.Get("http://www.ebay.com/marketplace/search/v1/services")

VB では、ファイルの先頭で他の .Net 名前空間をインポートするのと同じように、名前空間に Imports を使用することもできます。このオプションの利点は、プロジェクトにスキーマがある場合、クエリを作成する際に XML 構造に対してインテリセンスを取得できることです。

Imports <xmlns:eb="http://www.ebay.com/marketplace/search/v1/services">

2 つ目の問題は、title 要素が searchResult の直接の子ではなく、さらに深くネストされていることです。名前空間のインポートを利用するサンプルを次に示します。私はVB XMLリテラルを子孫に使用しています(...)。C#の偏った答えを与える人とは対照的です;-)

Public Class XmlTest
    Public Sub TestXml()
        Dim data = <findItemsByProductResponse xmlns="http://www.ebay.com/marketplace/search/v1/services">
                       <ack>Success</ack>
                       <version>1.12.0</version>
                       <timestamp>2013-06-02T22:42:04.500Z</timestamp>
                       <searchResult count="5">
                           <item>
                               <itemId>370821427802</itemId>
                               <title>
Modern Database Management 11E by Hoffer, Ramesh, Topi 11th (Int'l Edition)
</title>
                               <globalId>EBAY-US</globalId>
                               <primaryCategory>
                                   <categoryId>2228</categoryId>
                                   <categoryName>Textbooks, Education</categoryName>
                               </primaryCategory>
                               <galleryURL>
http://thumbs3.ebaystatic.com/m/meSAqCRbXecSjZjO1833dWQ/140.jpg
</galleryURL>
                               <viewItemURL>
http://www.ebay.com/itm/Modern-Database-Management-11E-Hoffer-Ramesh-Topi-11th-Intl-Edition-/370821427802?pt=US_Texbook_Education
</viewItemURL>
                               <productId type="ReferenceID">143649496</productId>
                               <paymentMethod>PayPal</paymentMethod>
                               <autoPay>true</autoPay>
                               <location>Malaysia</location>
                               <country>MY</country>
                               <shippingInfo>
                                   <shippingServiceCost currencyId="USD">0.0</shippingServiceCost>
                                   <shippingType>Free</shippingType>
                                   <shipToLocations>Worldwide</shipToLocations>
                                   <expeditedShipping>true</expeditedShipping>
                                   <oneDayShippingAvailable>false</oneDayShippingAvailable>
                                   <handlingTime>1</handlingTime>
                               </shippingInfo>
                               <sellingStatus>
                                   <currentPrice currencyId="USD">54.07</currentPrice>
                                   <convertedCurrentPrice currencyId="USD">54.07</convertedCurrentPrice>
                                   <sellingState>Active</sellingState>
                                   <timeLeft>P20DT10H47M20S</timeLeft>
                               </sellingStatus>
                               <listingInfo>
                                   <bestOfferEnabled>false</bestOfferEnabled>
                                   <buyItNowAvailable>false</buyItNowAvailable>
                                   <startTime>2013-05-24T09:25:25.000Z</startTime>
                                   <endTime>2013-06-23T09:29:24.000Z</endTime>
                                   <listingType>StoreInventory</listingType>
                                   <gift>false</gift>
                               </listingInfo>
                               <returnsAccepted>true</returnsAccepted>
                               <condition>
                                   <conditionId>1000</conditionId>
                                   <conditionDisplayName>Brand New</conditionDisplayName>
                               </condition>
                               <isMultiVariationListing>false</isMultiVariationListing>
                               <topRatedListing>true</topRatedListing>
                           </item>
                           <item>...</item>
                           <item>...</item>
                           <item>...</item>
                           <item>...</item>
                       </searchResult>
                       <paginationOutput>
                           <pageNumber>1</pageNumber>
                           <entriesPerPage>5</entriesPerPage>
                           <totalPages>3</totalPages>
                           <totalEntries>14</totalEntries>
                       </paginationOutput>
                   </findItemsByProductResponse>

        For Each el In data...<eb:searchResult>
            Console.WriteLine(el...<eb:title>.Value)
        Next


    End Sub
End Class
于 2013-08-16T15:03:05.613 に答える
0

XNamespaceXML をクエリするときは、インスタンスを使用する必要があります。

Dim ns = XNamespace.Get("http://www.ebay.com/marketplace/search/v1/services")

そして、それをすべてDescendantsの , Elements, Element, Attributes,Attributesなどの呼び出しに追加します。

For Each oXElement In oXDocument.Descendants(ns + "searchResult")
      sTitle = oXElement.Element(ns + "title").Value
Next

For Each oXElement In oXDocument.Elements(ns + searchResults) 
   sTitle = oXElement.Element(ns + "title").Value 
Next
于 2013-08-16T14:07:19.333 に答える