0

これらの XML 要素のいずれかを解析したいとします。

<Server                      hostName="foobar"                      />
<WebServer                   hostName="foobar"                      />
<WebServer                   hostName="foobar" listeningOnPort="80" />
<Server xsi:type="WebServer" hostName="foobar" listeningOnPort="80" />

次の XML スキーマ宣言に準拠しています。

<xsd:element name="Server" type="IServer" />
<xsd:element name="WebServer" substitutionGroup="Server" type="IWebServer" />

<xsd:complexType name="IServer">
  <xsd:attribute name="hostName" type="xsd:string" use="required" />
</xsd:complexType>

<xsd:complexType name="IWebServer">
  <xsd:complexContent>
    <xsd:extension base="IServer">
      <xsd:attribute name="listeningOnPort" type="xsd:int" use="optional" />
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

これらの型の対応する CLR オブジェクトに:

class Server : IServer { .. }               // [CorrespondsTo("Server")]
class WebServer : Server, IWebServer { .. } // [CorrespondsTo("WebServer")]

interface IServer                           // [CorrespondsTo("IServer")]
{
    string HostName { get; set; }           // [CorrespondsTo("hostName")]
}

interface IWebServer : IServer              // [CorrespondsTo("IWebServer")]
{
    int? ListeningOnPort { get; set; }      // [CorrespondsTo("listeningOnPort")]
}

大量のコードを書かなくてもこれを達成できる、.NET フレームワークまたは成熟した軽量の XML 解析ライブラリに何かありますか? XML スキーマを持つことは、実際に XML から CLR への型マッピングに役立ちますか?

  • XML から CLR への型マッピングの宣言型ソリューションは、たとえば C# 属性を介して行うとよいでしょう。
  • オプションの属性は、null 許容型に正しく変換する必要があります。
  • <Server xsi:type="WebServer" ... />WebServerオブジェクトになるはずです。
4

1 に答える 1

1

.NET は、XML から CLR へのシリアル化をネイティブにサポートしています。

一連の .xsd ドキュメントを取得し、対応する C# オブジェクトを作成する「XSD.exe」というコマンド ライン ツールがあります。

http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

次に、コードで、XmlSerializer クラスを使用してシリアル化および逆シリアル化します。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

于 2011-01-10T04:08:45.953 に答える