Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用c从XSD文件中提取属性及其名称和数据类型#_C#_Xml_Xsd - Fatal编程技术网

C# 如何使用c从XSD文件中提取属性及其名称和数据类型#

C# 如何使用c从XSD文件中提取属性及其名称和数据类型#,c#,xml,xsd,C#,Xml,Xsd,我无法从XSD文件中提取属性及其名称、数据类型和数据类型长度 我的XSD文件的结构如下。这个XSD中基本上有3列(需要操作、公司id、公司名称)。从这个XSD中,我需要提取列名、它们的数据类型和数据类型的maxlength。我需要用C来做这个 如果您对此有任何意见,我们将不胜感激。提前谢谢。我在这个论坛上尝试了很多博客/帖子,但都没有找到答案 <xs:element name="Companies"> <xs:complexType>

我无法从XSD文件中提取属性及其名称、数据类型和数据类型长度

我的XSD文件的结构如下。这个XSD中基本上有3列(需要操作、公司id、公司名称)。从这个XSD中,我需要提取列名、它们的数据类型和数据类型的maxlength。我需要用C来做这个

如果您对此有任何意见,我们将不胜感激。提前谢谢。我在这个论坛上尝试了很多博客/帖子,但都没有找到答案

       <xs:element name="Companies">
      <xs:complexType>
         <xs:sequence>
             <xs:element ref="Z" maxOccurs="unbounded"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:element name="Z">
      <xs:complexType>
         <xs:attribute ref="c1"/>
         <xs:attribute ref="c2" use="required" />
         <xs:attribute ref="c3" use="required" />
      </xs:complexType>
   </xs:element>
   <xs:attribute name="c1">
      <xs:annotation>
    <xs:appinfo>Action_needed</xs:appinfo>
    <xs:documentation>Action (Add/Update/Delete)</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
      <xs:restriction base="xs:string">
       <xs:enumeration value="A"/>
       <xs:enumeration value="U"/>
       <xs:enumeration value="D"/>
      </xs:restriction>
      </xs:simpleType>
   </xs:attribute>
   <xs:attribute name="c2">
      <xs:annotation>
    <xs:appinfo>Company ID</xs:appinfo>
    <xs:documentation>My Suppliers > Supplier Header > Name</xs:documentation>
      </xs:annotation>
         <xs:simpleType>
      <xs:restriction base="sqltypes:int"/>
       </xs:simpleType>
   </xs:attribute>
   <xs:attribute name="c3">
      <xs:annotation>
    <xs:appinfo>Company Name</xs:appinfo>
    <xs:documentation>My Suppliers > Supplier Header > Name</xs:documentation>
      </xs:annotation>
         <xs:simpleType>
      <xs:restriction base="sqltypes:nvarchar">
      <xs:maxLength value="255"/>
             </xs:restriction>
       </xs:simpleType>
   </xs:attribute>
 </xs:schema>

需要采取的行动
操作(添加/更新/删除)
公司ID
我的供应商>供应商标题>名称
公司名称
我的供应商>供应商标题>名称

如果您有上面这样的xsd文档,您可能需要这样的代码

这是一个控制台版本

我的xsd文件

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="transfer">
        <xs:complexType>
            <xs:sequence>
                    <xs:element name="sourceGLN" type="xs:string" minOccurs="1" maxOccurs="1" />
                            <xs:element name="actionType" minOccurs="1" maxOccurs="1">
                <xs:element name="destinationGLN" type="xs:string" minOccurs="1" maxOccurs="1" />
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="P" /> <!-- Mal Alim (Purchase) -->
                            <xs:enumeration value="S" /> <!-- Satis (Sale) -->
                            <xs:enumeration value="C" /> <!-- Cancel Sale (Cancel) -->
                            <xs:enumeration value="R" /> <!-- Iade (Return) -->
                            <xs:enumeration value="D" /> <!-- Deaktivasyon (Deactivation) -->
                            <xs:enumeration value="M" /> <!-- Uretim (Manufacture) -->
                            <xs:enumeration value="I" /> <!-- Ithalat (Import) -->
                            <xs:enumeration value="X" /> <!-- Ihrac (eXport) -->
                            <xs:enumeration value="O" /> <!-- Sarf (cOnsume) -->
                            <xs:enumeration value="N" /> <!-- Bilgi (iNformation) -->
                            <xs:enumeration value="T" /> <!-- Devir (Transfer) -->
                            <xs:enumeration value="L" /> <!-- Devir Iptal (canceL Transfer) -->
                            <xs:enumeration value="F" /> <!-- Aktarim (non-its transFer) -->
                            <xs:enumeration value="K" /> <!-- Aktarim Iptal (non-its cancel transfer) -->
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="shipTo" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element name="documentNumber" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element name="documentDate" type="xs:date" minOccurs="0" maxOccurs="1" />
                <xs:element name="note" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element name="version" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element name="carrier" type="carrierType" minOccurs="1" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="carrierType">
        <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:choice minOccurs="1" maxOccurs="1">
                <xs:element name="productList" type="productListType" minOccurs="1" maxOccurs="1" />
                <xs:element name="carrier" type="carrierType" minOccurs="1" maxOccurs="1" />
            </xs:choice>
        </xs:sequence>
        <xs:attribute name="carrierLabel" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:length value="20" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="containerType" type="xs:string" use="optional" />
    </xs:complexType>
    <xs:complexType name="productListType">
        <xs:sequence>
            <xs:element name="serialNumber" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="GTIN" type="xs:string" use="required" />
        <xs:attribute name="lotNumber" type="xs:string" use="required" />
        <xs:attribute name="productionDate" type="xs:date" use="optional" />
        <xs:attribute name="expirationDate" type="xs:date" use="required" />
        <xs:attribute name="PONumber" type="xs:string" use="optional" />
    </xs:complexType>
</xs:schema>

这是我的c#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Schema;
using System.Collections;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        private static void Main(string[] args)
        {
            XmlSchemaSet schemaSet = new XmlSchemaSet();
            schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
            schemaSet.Add("http://www.w3.org/2001/XMLSchema", "C:\\Chandan\\myxsdfile.xsd");
            schemaSet.Compile();

            XmlSchema xmlSchema = null;
            foreach (XmlSchema schema in schemaSet.Schemas())
            {
                xmlSchema = schema;
            }

            DataSet myDS = new DataSet();
            myDS.ReadXmlSchema("C:\\Chandan\\myxsdfile.xsd");

            foreach (object item in xmlSchema.Items)
            {
                XmlSchemaElement schemaElement = item as XmlSchemaElement;
                XmlSchemaComplexType complexType = item as XmlSchemaComplexType;

                if (schemaElement != null)
                {
                    Console.Out.WriteLine("Schema Element: {0}", schemaElement.Name);

                    XmlSchemaType schemaType = schemaElement.SchemaType;
                    XmlSchemaComplexType schemaComplexType = schemaType as XmlSchemaComplexType;

                    if (schemaComplexType != null)
                    {
                        XmlSchemaParticle particle = schemaComplexType.Particle;
                        XmlSchemaSequence sequence = particle as XmlSchemaSequence;

                        if (sequence != null)
                        {
                            foreach (XmlSchemaElement childElement in sequence.Items)
                            {
                                Console.Out.WriteLine("    Element/Type: {0}:{1}", childElement.Name,
                                                      childElement.SchemaTypeName.Name);
                            }

                        }
                        if (schemaComplexType.AttributeUses.Count > 0)
                        {
                            IDictionaryEnumerator enumerator = schemaComplexType.AttributeUses.GetEnumerator();

                            while (enumerator.MoveNext())
                            {
                                XmlSchemaAttribute attribute = (XmlSchemaAttribute)enumerator.Value;

                                Console.Out.WriteLine("      Attribute/Type: {0}", attribute.Name);
                            }
                        }
                    }
                }
                else if (complexType != null)
                {
                    Console.Out.WriteLine("Complex Type: {0}", complexType.Name);
                    OutputElements(complexType.Particle);
                    if (complexType.AttributeUses.Count > 0)
                    {
                        IDictionaryEnumerator enumerator = complexType.AttributeUses.GetEnumerator();

                        while (enumerator.MoveNext())
                        {
                            XmlSchemaAttribute attribute = (XmlSchemaAttribute)enumerator.Value;
                            Console.Out.WriteLine("      Attribute/Type: {0}", attribute.Name);
                        }
                    }
                }
                Console.Out.WriteLine();
            }

            Console.Out.WriteLine();
            Console.In.ReadLine();
        }

        private static void OutputElements(XmlSchemaParticle particle)
        {
            XmlSchemaSequence sequence = particle as XmlSchemaSequence;
            XmlSchemaChoice choice = particle as XmlSchemaChoice;
            XmlSchemaAll all = particle as XmlSchemaAll;

            if (sequence != null)
            {
                Console.Out.WriteLine("  Sequence");

                for (int i = 0; i < sequence.Items.Count; i++)
                {
                    XmlSchemaElement childElement = sequence.Items[i] as XmlSchemaElement;
                    XmlSchemaSequence innerSequence = sequence.Items[i] as XmlSchemaSequence;
                    XmlSchemaChoice innerChoice = sequence.Items[i] as XmlSchemaChoice;
                    XmlSchemaAll innerAll = sequence.Items[i] as XmlSchemaAll;

                    if (childElement != null)
                    {
                        Console.Out.WriteLine("    Element/Type: {0}:{1}", childElement.Name,
                                              childElement.SchemaTypeName.Name);
                    }
                    else OutputElements(sequence.Items[i] as XmlSchemaParticle);
                }
            }
            else if (choice != null)
            {
                Console.Out.WriteLine("  Choice");
                for (int i = 0; i < choice.Items.Count; i++)
                {
                    XmlSchemaElement childElement = choice.Items[i] as XmlSchemaElement;
                    XmlSchemaSequence innerSequence = choice.Items[i] as XmlSchemaSequence;
                    XmlSchemaChoice innerChoice = choice.Items[i] as XmlSchemaChoice;
                    XmlSchemaAll innerAll = choice.Items[i] as XmlSchemaAll;

                    if (childElement != null)
                    {
                        Console.Out.WriteLine("    Element/Type: {0}:{1}", childElement.Name,
                                              childElement.SchemaTypeName.Name);
                    }
                    else OutputElements(choice.Items[i] as XmlSchemaParticle);
                }

                Console.Out.WriteLine();
            }
            else if (all != null)
            {
                Console.Out.WriteLine("  All");
                for (int i = 0; i < all.Items.Count; i++)
                {
                    XmlSchemaElement childElement = all.Items[i] as XmlSchemaElement;
                    XmlSchemaSequence innerSequence = all.Items[i] as XmlSchemaSequence;
                    XmlSchemaChoice innerChoice = all.Items[i] as XmlSchemaChoice;
                    XmlSchemaAll innerAll = all.Items[i] as XmlSchemaAll;

                    if (childElement != null)
                    {
                        Console.Out.WriteLine("    Element/Type: {0}:{1}", childElement.Name,
                                              childElement.SchemaTypeName.Name);
                    }
                    else OutputElements(all.Items[i] as XmlSchemaParticle);
                }
                Console.Out.WriteLine();
            }
        }
        static void ValidationCallback(object sender, ValidationEventArgs args)
        {
            if (args.Severity == XmlSeverityType.Warning)
                Console.Write("WARNING: ");
            else if (args.Severity == XmlSeverityType.Error)
                Console.Write("ERROR: ");

            Console.WriteLine(args.Message);
        }
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml.Schema;
使用系统集合;
使用系统数据;
命名空间控制台应用程序1
{
班级计划
{
私有静态void Main(字符串[]args)
{
XmlSchemaSet schemaSet=新的XmlSchemaSet();
schemaSet.ValidationEventHandler+=新的ValidationEventHandler(ValidationCallback);
schemaSet.Add(“http://www.w3.org/2001/XMLSchema“,“C:\\Chandan\\myxsdfile.xsd”);
schemaSet.Compile();
XmlSchema=null;
foreach(schemaSet.Schemas()中的XmlSchema)
{
xmlSchema=schema;
}
数据集myDS=新数据集();
myDS.ReadXmlSchema(“C:\\Chandan\\myxsdfile.xsd”);
foreach(xmlSchema.Items中的对象项)
{
XmlSchemaElement schemaElement=项目为XmlSchemaElement;
XmlSchemaComplexType complexType=项目为XmlSchemaComplexType;
if(schemaElement!=null)
{
WriteLine(“Schema元素:{0}”,schemaElement.Name);
XmlSchemaType schemaType=schemaElement.schemaType;
XmlSchemaComplexType schemaComplexType=schemaType作为XmlSchemaComplexType;
if(schemaComplexType!=null)
{
XmlSchemaParticle particle=schemaComplexType.particle;
XmlSchemaSequence序列=粒子作为XmlSchemaSequence;
if(序列!=null)
{
foreach(序列中的XmlSchemaElement子元素.Items)
{
Console.Out.WriteLine(“元素/类型:{0}:{1}”,childElement.Name,
childElement.SchemaTypeName.Name);
}
}
如果(schemaComplexType.AttributeUse.Count>0)
{
IDictionaryEnumerator enumerator=schemaComplexType.AttributeUse.GetEnumerator();
while(枚举数.MoveNext())
{
XmlSchemaAttribute属性=(XmlSchemaAttribute)枚举器.Value;
Console.Out.WriteLine(“属性/类型:{0}”,Attribute.Name);
}
}
}
}
else if(complexType!=null)
{
WriteLine(“复杂类型:{0}”,complexType.Name);
OutputElements(complexType.Particle);
如果(complexType.AttributeUse.Count>0)
{
IDictionaryEnumerator enumerator=complexType.AttributeUse.GetEnumerator();
while(枚举数.MoveNext())
{
XmlSchemaAttribute属性=(XmlSchemaAttribute)枚举器.Value;
Console.Out.WriteLine(“属性/类型:{0}”,Attribute.Name);
}
}
}
Console.Out.WriteLine();
}
Console.Out.WriteLine();
Console.In.ReadLine();
}
私有静态void OutputElements(XmlSchemaParticle粒子)
{
XmlSchemaSequence序列=粒子作为XmlSchemaSequence;
XmlSchemaChoice选择=p