会社行きたくなかったんです。

自由になりたくて会社辞めました

IT プログラミング

Visual StudioでXMLからVB.netのClassを生成してみました。

投稿日:

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することができるので、簡単になるかと思ったのですが、今のところ、上手くできていません。

できるようになったら、また記述します。

 

-IT, プログラミング

Copyright© 自由になりたくて会社辞めました , 2024 AllRights Reserved Powered by AFFINGER4.