如何在C#中动态创建XML模式?

时间:2011-03-29 14:15:45

标签: c# xml xsd linq-to-xml

我尝试使用传统的XElement和XAttribute类从C#动态创建XML模式(XSD),但是使用冒号指定任何名称都无效。也就是说,我无法创建元素< xs:element>使用代码

... = new XElement("xs:element");

因为不允许“:”。

在C#中动态构建模式的正确方法是什么?

4 个答案:

答案 0 :(得分:2)

要创建模式,您应该使用XmlSchema类。以下链接提供了以编程方式创建一个的综合示例:

http://msdn.microsoft.com/en-us/library/9ta3w88s.aspx


例如:

static void Main(string[] args)
{
    var schema = new XmlSchema();

    // <xs:element name="myElement" type="xs:string"/>
    var myElement = new XmlSchemaElement();
    schema.Items.Add(myElement);
    elementCat.Name = "myElement";
    elementCat.SchemaTypeName = 
        new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema");

    // writing it out to any stream
    var nsmgr = new XmlNamespaceManager(new NameTable());
    nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
    schema.Write(Console.Out, nsmgr);

    Console.ReadLine();
}

答案 1 :(得分:1)

创建新的XML元素时,您应该知道冒号前面的部分(在本例中为xs)实际上是XML命名空间的别名(在XSD的情况下,{{1}通常是指xs)。因此,要继续使用XDocument构建XSD,您可能希望使用:

http://www.w3.org/2001/XMLSchema

请参阅此处的示例: http://msdn.microsoft.com/en-us/library/bb292758.aspx

答案 2 :(得分:0)

我写了一篇关于这个主题的blog。您可以使用DataTable保存架构。

答案 3 :(得分:0)

如果要创建xml,则应使用XmlWriter类