2014-11-06 65 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