在c#中生成XML(使用从XSD生成的类)

本文关键字:XSD XML | 更新日期: 2023-09-27 18:12:51

我正在尝试使用c#生成.xml文件。为此,我使用了一个从XSD生成的类。

确切地说,我正在用Nunit results.xsd做一些实验。

我需要多次生成一些元素。在每个函数

的末尾我有下面的代码
 var serializer = new XmlSerializer(typeof(resultType));
  using (var stream = new StreamWriter(@"C:'test.xml",true))
serializer.Serialize(stream, data);

当我多次执行此操作时,我每次都看到带有XML版本和编码的xml标记。

我如何将它们作为单独的函数,以便我可以多次调用对象以创建相同类型的多个XML元素,并最终保存带有数据的XML ?我需要生成的文件具有类似于Nunit的结果XML文件的结构。

在c#中生成XML(使用从XSD生成的类)

编辑;我们使用一个"代理"类来改变结果,而不改变现有的方案。

using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace Tool.Cons
{
class Result
{
    [XmlElement("test-suite")]
    public testsuiteType[] testsuite { get; set; }
    /// <remarks/>
    [XmlAttribute()]
    public string name { get; set; }
    /// <remarks/>
    [XmlAttribute()]
    public decimal total { get; set; }
    /// <remarks/>
    [XmlAttribute()]
    public decimal failures { get; set; }
    /// <remarks/>
    [XmlAttribute("not-run")]
    public decimal notrun { get; set; }
    /// <remarks/>
    [XmlAttribute()]
    public string date { get; set; }
    /// <remarks/>
    [XmlAttribute()]
    public string time { get; set; }
}
class Program
{
    static void AppendTestSuite(XDocument xdocument, testsuiteType suite)
    {
        var ser = new XmlSerializer(typeof(testsuiteType));
        using (var writer = xdocument.Root.CreateWriter())
        {
            // We need this for some reason...
            writer.WriteWhitespace("");
            ser.Serialize(writer, suite);
        }
    }
    static void Main(string[] args)
    {
        var res = GetTestResult();
        var xdoc = new XDocument();
        // Create the root element.
        using (var writer = xdoc.CreateWriter())           
            ser.Serialize(writer, res);
        // For testing purposes:
        AppendTestSuite(xdoc, res.testsuite);
        var _out = xdoc.ToString();
    }
}
}

您可以使用开关/c <path to xsd>运行xsd.exe(在Microsoft SDK文件夹中)为您生成强类型类。在很多情况下它是完美的。不过! !所创建的结构不是您的日常课程建设经验。这个类的构建方式很奇怪,所以在使用它的时候请注意。