2014-11-06 64 views
1

我想读取的XSD文件的层次结构,类型和出现。 直到现在,我只能成功地将文件导入到XmlSchemaSet对象中,从中我仍然无法读取字符串/ int/bool类型,既不是最大/最小出现次数也不是层次结构。阅读层次结构,类型和出现的XSD文件

例子:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema 
    attributeFormDefault="unqualified" 
    elementFormDefault="qualified" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 

    <xs:simpleType name="ActionType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="GET"/> 
     <xs:enumeration value="POST"/> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:element name="Data"> 
    <xs:complexType> 
     <xs:all> 
     <xs:element name="Action" type="ActionType" minOccurs="1" maxOccurs="1" /> 
     <xs:element name="Target" type="xs:string" minOccurs="1" maxOccurs="1" /> 
     <xs:element name="Parameters" minOccurs="1" maxOccurs="1"> 
      <xs:complexType> 
      <xs:sequence> 
      <xs:element name="include_entities" maxOccurs="0" /> 
      <xs:element name="include_user_entities" maxOccurs="0" /> 
      <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:all> 
</xs:complexType> 

+0

XML模式本身就是一个XML文档 - 您能否将它读入“XDocument”并查询您想要的项目? – 2014-11-06 14:21:06

+0

它可能是,但是我想要的是实际导入整个XSD到一个C#对象,以便我可以得到为例: 数据数据与枚举动作类型,字符串目标,等等 – sstephen 2014-11-06 14:32:42

回答

1

您可以尝试使用微软的XSD工具。将XSD保存为XML格式并使用以下命令运行XSD工具:

xsd file.xml /c 

它会为您生成可序列化的对象。然后,你可以使用:

XmlSerializer serializer = new XmlSerializer(XmlClassTypeYouCreatedOnXsdTool); 
    XmlReader reader = new XmlTextReader(xml); 
    var instance = serializer.Deserialize(reader); 

记住启动Visual Studio的命令提示符下,以有XSD路径设置,否则你将无法找到它。

+0

我可以生成XmlClassTypeYouCreatedOnXsdTool在运行时? – sstephen 2014-11-07 12:07:49

+0

XSD工具为您创建一个强类型类,以便在运行时在内存中序列化任何XML(在本例中,也是XML格式的XSD)。你可以尝试使用Reflection在运行时创建自己的时间,但我没有看到它的重点。你需要序列化XSD文件或XML文件?我相信我还没有弄清楚你的问题的全貌。 – rodrigogq 2014-11-07 15:05:26