如何在C#中解析通用XML文件以在SQL Server数据库中创建表

如何在C#中解析通用XML文件以在SQL Server数据库中创建表,c#,xml,xsd,C#,Xml,Xsd,我有一个通用XML文件,我想对其进行解析,以便根据XML数据创建SQL server表: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Student"> <xs:complexType> <xs:sequence>

我有一个通用XML文件,我想对其进行解析,以便根据XML数据创建SQL server表:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Student">
  <xs:complexType>
    <xs:sequence>
    <xs:element name="Id" type="xs:integer"/>
    <xs:element name="Name" type="xs:string"/>
    <xs:element name="City" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>
Student将是表的名称,Id、name和City是列。我所需要的只是如何解析XML文件并恢复数据。

您的XML文件是一个正式描述可扩展标记语言(XML)文档中元素的文件。您可以将这样的文件加载到模式集合中,对其进行编译,然后查询由此定义的模式,以获取主元素名称及其属性

假设您有一个字符串
xsdString
,其中包含问题中显示的XSD。然后,您可以按如下方式加载、编译和打印复杂元素及其属性:

// Load the xsdString into an XmlSchemaSet.
// If loading from a file use a StreamReader rather than a StringReader
XmlSchemaSet schemaSet = new XmlSchemaSet();
using (var reader = new StringReader(xsdString))
{
    schemaSet.Add(XmlSchema.Read(reader, null));
}

// Compile the schema
schemaSet.Compile();

// Iterate over the schemas
// Code adapted from https://docs.microsoft.com/en-us/dotnet/standard/data/xml/traversing-xml-schemas
foreach (XmlSchema schema in schemaSet.Schemas())
{
    // Iterate over the complex types in the schema
    foreach (XmlSchemaElement element in schema.Elements.Values)
    {
        var complexType = element.ElementSchemaType as XmlSchemaComplexType;
        if (complexType == null)
            continue;

        Console.WriteLine("Complex element: {0}", element.Name);

        // If the complex type has any attributes, get an enumerator
        // and write each attribute name to the console.
        if (complexType.AttributeUses.Count > 0)
        {
            var enumerator = complexType.AttributeUses.GetEnumerator();
            while (enumerator.MoveNext())
            {
                var attribute = (XmlSchemaAttribute)enumerator.Value;
                var name = attribute.Name;
                var type = attribute.AttributeSchemaType.TypeCode;

                Console.WriteLine("   Attribute {0}: {1}", name, type);
            }
        }

        // Get the sequence particle of the complex type.
        var sequence = complexType.ContentTypeParticle as XmlSchemaSequence;
        if (sequence != null)
        {
            // Iterate over each XmlSchemaElement in the Items collection.
            foreach (XmlSchemaElement childElement in sequence.Items)
            {
                var name = childElement.Name;
                var type = childElement.ElementSchemaType.TypeCode;

                Console.WriteLine("   Element {0}: {1}", name, type);
            }
        }
    }
}
哪个输出

复杂元素:学生
元素Id:整数
元素名称:String
元素城市:字符串
请注意,XSD类型
xs:integer
对应于一个无界整数,不一定是一个适合
Int32
Int64
的整数

参考资料:


演示小提琴。

这能回答您的问题吗。如果你有一个特定的问题,编辑你的问题来关注它。否则,看起来您只是要求某人为您编写代码。请参阅是否也充分回答了您的问题?我不同意这是正确的副本。这个问题解决了解析任何XML文件的方法,但OP的文件是一个XSD文件(XML格式)。因此,有更高级别的工具可用于反序列化和解释此类文件。这似乎是重复的,但不幸的是,它的唯一答案是一个链接唯一的答案,参考MSDN文档,再一次,通用XML解析。我不知道如何说谢谢!你真的应该得到11块金牌