假设我想解析任何这些XML元素:
<Server hostName="foobar" />
<WebServer hostName="foobar" />
<WebServer hostName="foobar" listeningOnPort="80" />
<Server xsi:type="WebServer" hostName="foobar" listeningOnPort="80" />
遵循以下XML Schema声明:
<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 Schema实际上是否有助于XML-to-CLR类型映射?
<Server xsi:type="WebServer" ... />
应该会生成WebServer
个对象。答案 0 :(得分:1)
.NET本身支持XML到CLR序列化。
有一个名为“XSD.exe”的命令行工具,它接受一系列.xsd文档并创建相应的C#对象。
http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx
然后在代码中,使用XmlSerializer类来序列化和反序列化。
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx