none
XMLスチーマの変換について RRS feed

  • 質問

  • VisualBasic2008でXMLを読込むWindowsアプリケーションを開発しています。

    Microsoft SDK内のxsd.exeを利用し、XMLスチーマをVBクラスに変換しているのですが

    下記サンプルのように、同名の要素(例ではfoge)がある場合、自動的にプロパティ名が

    ”foge1”となってしまいます。

    ■変換元XMLスチーマ sample.xsd

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="foge">
            <xs:annotation>
                <xs:documentation>sample element</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="sample">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="foge"/>
                    <xs:element ref="foge"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>

    ■変換後 sample.vb

    Option Strict Off
    Option Explicit On

    Imports System.Xml.Serialization

    <System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432"), _
     System.SerializableAttribute(), _
     System.Diagnostics.DebuggerStepThroughAttribute(), _
     System.ComponentModel.DesignerCategoryAttribute("code"), _
     System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True), _
     System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=False)> _
    Partial Public Class sample

      Private fogeField As Object
      Private foge1Field As Object

      <System.Xml.Serialization.XmlElementAttribute(Order:=0)> _
      Public Property foge() As Object
        Get
          Return Me.fogeField
        End Get
        Set(ByVal value As Object)
          Me.fogeField = value
        End Set
      End Property

      <System.Xml.Serialization.XmlElementAttribute("foge", Order:=1)> _
      Public Property foge1() As Object
        Get
          Return Me.foge1Field
        End Get
        Set(ByVal value As Object)
          Me.foge1Field = value
        End Set
      End Property
    End Class

    この変換したクラスに System.Xml.Serialization.XmlSerializer でXMLファイルを

    Deserializeすると、"foge"には値が入りますが、"foge1"には要素名が違うせいか

    値が入らず読込むことができません。

    XMLスチーマの設計は他社で行っており、変更が難しい為こちら側で対処したいと考えておりますが

    何か良い案はありませんでしょうか?

    よろしくお願い致します。

    2012年6月6日 2:02