当你得到结构不规则的 XML 数据时;不适合 DataSet 并且您希望对象模型轻松处理数据。您可以使用带有 /classes 选项的XML 架构定义工具 (Xsd.exe)从 XML 文件生成 C# 或 VB.Net 类。
XSD.exe 位于:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\xsd.exe
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\xsd.exe
从 Visual Studio 命令行运行 xsd.exe。
-开始-所有程序
-Visual
Studio
-工具 -
命令行
这是查看所有 XSD 命令行参数的命令:
xsd /?
要将不规则的 XML 文件 (XmlResponseObject.xml) 转换为类:
xsd c:\Temp\XmlResponseObject.xml /classes /language:CS /out:c:\Temp\
这将生成一个 csharp 文件,其中包含表示 XML 的类。您可能希望将其重构为单独的类文件,注意单个文件中的重复类通过命名空间消除歧义。无论哪种方式,这些类都不会是所有 xml 属性中最好看的,但好的部分是您可以通过 XML 绑定到它们。这是我通过 REST Web 服务检索 XML 的示例,xmlResponseObject 是适合 XML 的类的 ObjectModel。
public interface IYourWebService
{
XmlResponseObject GetData(int dataId);
}
public class YourWebService : IYourWebService
{
public XmlResponseObject GetData(int dataId)
{
XmlResponseObject xmlResponseObject = null;
var url = "http://SomeSite.com/Service/GetData/" + dataId;
try
{
var request = WebRequest.Create(url) as HttpWebRequest;
if (request != null)
{
request.AllowAutoRedirect = true;
request.KeepAlive = true;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; InfoPath.2; .NET4.0C; .NET4.0E)";
request.Credentials = CredentialCache.DefaultNetworkCredentials;
request.CookieContainer = new CookieContainer();
var response = request.GetResponse() as HttpWebResponse;
if (request.HaveResponse && response != null)
{
var streamReader = new StreamReader(response.GetResponseStream());
var xmlSerializer = new XmlSerializer(typeof(XmlResponseObject));
xmlResponseObject = (XmlResponseObject)xmlSerializer.Deserialize(streamReader);
}
}
}
catch (Exception ex)
{
string debugInfo = "\nURL: " + url;
Console.Write(ex.Message + " " + debugInfo + " " + ex.StackTrace);
}
return xmlResponseObject;
}
}
鉴于您只想发送和接收文档更改,您可以使用 IsDirty 标志修改类。我敢肯定,尽管一旦您有了要使用的课程,就很容易检测到差异。