c# - 使用硬编码架构 C# 创建 XmlDocument

标签 c# xml xml-generation

我有一个处理 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/

相关文章:

asp.net - 数据库表或 XML

c# - 符号已创建,但调试永远不会在断点处停止

c# - 列名中带有前缀的简洁 map

c# - 在内存中解压 cab 文件

xml - 简单的 Clojure XML 编辑

php - Cakephp生成xml错误-空白

c# - 如何以编程方式重新启动 Windows 10 IoT 应用程序

asp.net - 使用来自 asp.net webservice 的 jquery 解析简单的 xml

java - 如何使用 XSLT 递归将任何 xml 数据转换为 html TableView :