我有一个处理 XML 文件的应用程序。如果 xml 文件存在,它会很好地工作,但是也有一个要求,即项目生成一个空白的 XML 文件,然后写入它以防输出文件不存在。
xml 文件有一个相当复杂的架构,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Results>
<Result>
<WorkorderId>45</WorkorderId>
<WorkerId>13</WorkerId>
<DeviceId>38954178</DeviceId>
<Latitude>45.234</Latitude>
<Longitude>19.54</Longitude>
<Note>[all is good]</Note>
<Operations>
<Operation>
<OperationId>23</OperationId>
<Result>Success</Result>
<ParsedInformation>
<Info>parsed data</Info>
<Info>more parsed data</Info>
</ParsedInformation>
</Operation>
<!-- more operations ... -->
</Operations>
</Result>
<!-- more results ... -->
</Results>
我想知道如何创建这样的 XmlDocument,以便将结果写入其中?是否有关于在项目中某处硬编码模式等的“最佳实践”?
请注意,我是 Xml 的新手,因此非常欢迎任何其他信息/文献。
最佳答案
我通常会创建一组包含数据的类,并用适当的 XmlSerializer 属性标记它们,以确保它们被序列化为您期望的格式。这是一个很好的资源:http://msdn.microsoft.com/en-us/library/2baksw0z(VS.85).aspx
在您的情况下,您将拥有以下类(未经测试):
[XmlRoot("Results")]
public class Results
{
List<Result> results = new List<Result>();
[XmlElement("Result")]
List<Result> Results {get{return results;}}
}
public class Result
{
List<Operation> operations = new List<Operation>();
int WorkorderId {get; set;}
.... other fields
string Note{get;set;}
List<Operation> Operations {get{return operations;}}
}
public class Operation
{
List<string> parsedInformation = new List<string>();
int OperationId {get;set;}
....
[XmlArray("ParsedInformation")]
[XmlArrayItem("Info")]
List<string> ParsedInformation{get{return parsedInformation;}}
}
稍后您使用 XmlSerializer 类将其序列化为 xml:
XmlSerializer serializer = new XmlSerializer(typeof(Results));
StringBuilder sb = new StringBuilder(); //this will contain the xml
serializer.Serialize(new TextWriter(sb), resultsObj);
显然,您也可以将数据从字符串反序列化为对象。
请注意,如果您的 xml 有 XSD 架构,您可以使用 xsd.exe 工具为您生成代码。
关于c# - 使用硬编码架构 C# 创建 XmlDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1192581/