「VB.netでAmazon SQSからメッセージを取得するサンプルプログラム作りました。」で、
Amazon SQS取得したメッセージは、XMLです。
このXMLからVB.netのClassを生成したいと思います。
開発環境は、Visual Studio 2017 Communityです。
スポンサーリンク
まずは、XSDファイルを作成します。
プロジェクトを右クリック>追加>新しい項目
「XML to Schema」を選択し、名前を「AmazonSQSMessage.xsd」とし、「追加」をクリック
「XMLの入力または貼り付け」をクリック
Amazon SQSから取得したXMLを貼り付けて「OK」をクリック
XML が追加されたので、「OK」をクリック
「AmazonSQSMessage.xsd」ができました。
コードはこうなっています。
「AmazonSQSMessage.xsd」のコード
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Notification"> <xs:complexType> <xs:sequence> <xs:element name="NotificationMetaData"> <xs:complexType> <xs:sequence> <xs:element name="NotificationType" type="xs:string" /> <xs:element name="PayloadVersion" type="xs:decimal" /> <xs:element name="UniqueId" type="xs:string" /> <xs:element name="PublishTime" type="xs:dateTime" /> <xs:element name="SellerId" type="xs:string" /> <xs:element name="MarketplaceId" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="NotificationPayload"> <xs:complexType> <xs:sequence> <xs:element name="AnyOfferChangedNotification"> <xs:complexType> <xs:sequence> <xs:element name="OfferChangeTrigger"> <xs:complexType> <xs:sequence> <xs:element name="MarketplaceId" type="xs:string" /> <xs:element name="ASIN" type="xs:string" /> <xs:element name="ItemCondition" type="xs:string" /> <xs:element name="TimeOfOfferChange" type="xs:dateTime" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Summary"> <xs:complexType> <xs:sequence> <xs:element name="NumberOfOffers"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="OfferCount"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:unsignedByte"> <xs:attribute name="condition" type="xs:string" use="required" /> <xs:attribute name="fulfillmentChannel" type="xs:string" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="LowestPrices"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="LowestPrice"> <xs:complexType> <xs:sequence> <xs:element name="LandedPrice"> <xs:complexType> <xs:sequence> <xs:element name="Amount" type="xs:unsignedShort" /> <xs:element name="CurrencyCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ListingPrice"> <xs:complexType> <xs:sequence> <xs:element name="Amount" type="xs:unsignedShort" /> <xs:element name="CurrencyCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Shipping"> <xs:complexType> <xs:sequence> <xs:element name="Amount" type="xs:unsignedByte" /> <xs:element name="CurrencyCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element minOccurs="0" name="Points"> <xs:complexType> <xs:sequence> <xs:element name="PointsNumber" type="xs:unsignedByte" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="condition" type="xs:string" use="required" /> <xs:attribute name="fulfillmentChannel" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="BuyBoxPrices"> <xs:complexType> <xs:sequence> <xs:element name="BuyBoxPrice"> <xs:complexType> <xs:sequence> <xs:element name="LandedPrice"> <xs:complexType> <xs:sequence> <xs:element name="Amount" type="xs:unsignedShort" /> <xs:element name="CurrencyCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ListingPrice"> <xs:complexType> <xs:sequence> <xs:element name="Amount" type="xs:unsignedShort" /> <xs:element name="CurrencyCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Shipping"> <xs:complexType> <xs:sequence> <xs:element name="Amount" type="xs:unsignedByte" /> <xs:element name="CurrencyCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="condition" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="SalesRankings"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="SalesRank"> <xs:complexType> <xs:sequence> <xs:element name="ProductCategoryId" type="xs:string" /> <xs:element name="Rank" type="xs:unsignedByte" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="BuyBoxEligibleOffers"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="OfferCount"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:unsignedByte"> <xs:attribute name="condition" type="xs:string" use="required" /> <xs:attribute name="fulfillmentChannel" type="xs:string" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Offers"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Offer"> <xs:complexType> <xs:sequence> <xs:element name="SellerId" type="xs:string" /> <xs:element name="SubCondition" type="xs:string" /> <xs:element name="SellerFeedbackRating"> <xs:complexType> <xs:sequence> <xs:element name="SellerPositiveFeedbackRating" type="xs:unsignedByte" /> <xs:element name="FeedbackCount" type="xs:unsignedShort" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ShippingTime"> <xs:complexType> <xs:attribute name="minimumHours" type="xs:unsignedShort" use="required" /> <xs:attribute name="maximumHours" type="xs:unsignedShort" use="required" /> <xs:attribute name="availabilityType" type="xs:string" use="required" /> </xs:complexType> </xs:element> <xs:element name="ListingPrice"> <xs:complexType> <xs:sequence> <xs:element name="Amount" type="xs:unsignedShort" /> <xs:element name="CurrencyCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element minOccurs="0" name="Points"> <xs:complexType> <xs:sequence> <xs:element name="PointsNumber" type="xs:unsignedByte" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Shipping"> <xs:complexType> <xs:sequence> <xs:element name="Amount" type="xs:unsignedShort" /> <xs:element name="CurrencyCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element minOccurs="0" name="ShipsFrom"> <xs:complexType> <xs:sequence> <xs:element name="Country" type="xs:string" /> <xs:element name="State" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="IsFulfilledByAmazon" type="xs:boolean" /> <xs:element name="IsBuyBoxWinner" type="xs:boolean" /> <xs:element name="IsFeaturedMerchant" type="xs:boolean" /> <xs:element name="ShipsDomestically" type="xs:boolean" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Visual Studio 2017には、XSDをコードに変換する機能がないようなので、「Xsd2Code」という拡張機能をインストールします。
インストールする手順 はこちらの記事です。
→Xsd2CodeをVisual Studio Community 2017 にインストールしました。
「AmazonSQSMessage.xsd」を右クリック
「run xsd2code++」をクリック
「Generate」をクリック
「AmazonSQSMessage.Designer.vb」ができました。
XML→XSD→VB.netへの変換ができれば、XmlSerializerでDeserializeすることができるので、簡単になるかと思ったのですが、今のところ、上手くできていません。
できるようになったら、また記述します。