以编程方式从XML Schema生成测试XML

时间:2013-01-18 07:31:37

标签: c# xml visual-studio xsd sample

我现在搜索了一下,但是我无法找到一种以编程方式从XML Schema自动生成数据的方法。假设我有这个XML架构:

<xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name ="Persons">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Person">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="FirstName" type="xs:string" />
            <xs:element name="LastName" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element> 

我可以使用VS函数“Generate Sample XML”从中创建XML enter image description here
有没有办法以编程方式执行此操作?

编辑:指定。我不想自己创建所有对象并以编程方式插入数据。我想让它自动创建对象和属性,就像VS中的“生成示例XML”一样。这样做的原因是我想更改XSD而无需对xml样本生成做任何事情。

2 个答案:

答案 0 :(得分:9)

做了一些搜索。我找到了project已经实现了xml样本生成器。我创建了一个测试解决方案并导入了类。然后我删除了XmlGen.cs文件并创建了我自己的main方法。输出将基于根元素。

public static void Main(string[] args)
        {
            using (var stream = new MemoryStream(File.ReadAllBytes("schema.xsd")))
            {
                var schema = XmlSchema.Read(XmlReader.Create(stream ), null);
                var gen = new XmlSampleGenerator(schema, new XmlQualifiedName("rootElement"));
                gen.WriteXml(XmlWriter.Create(@"c:\temp\autogen.xml"));
                Console.WriteLine("Autogenerated file is here : c:\temp\autogen.xml");
            }            
        }

答案 1 :(得分:0)

您可以将简单函数写入数据表中,然后执行DataTable.WriteXml(string filePath)

Somethig喜欢这样:

xmlschema1 schema=new xmlschema1();
//put some test data in table
schema.Persons.AddPersonsRow(...some params);
//generate xml
schema.Persons.WriteXml(filePath);