2013-05-08 78 views
0

的樹我有類:如何創建XSD架構節點

class Node{ 
    Public string Name; 
    Public Node LeftNode; 
    Public Node RightNode; 
} 

與該類我可以創建節點的一棵樹,我會想代表與XML那棵樹。

目前我的XML架構的樣子:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Node" > 
     <xs:complexType> 
      <xs:all> 

       <xs:element name="Name" type="xs:string" /> 

       <xs:element name="RightNode">  
        <!-- I need help here --> 
       </xs:element> 

       <xs:element name="LeftNode">  
        <!-- I need help here --> 
       </xs:element> 

      </xs:all> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

感謝,我在Visual Studio中intellicence,我能夠創建以下XML:

<?xml version="1.0" encoding="iso-8859-1"?> 

<Node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="Path_Where_Xsd_File_IsLocated.xsd"> 

    <Name>Test></Name>  
    <RightNode></RightNode>  
    <LeftNode></LeftNode> 

</Node> 

,我的問題我希望能夠擁有嵌套的孩子。換句話說,我會希望能夠構建這樣的:

<?xml version="1.0" encoding="iso-8859-1"?> 

<Node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="Path_Where_Xsd_File_IsLocated.xsd"> 

    <Name>Test></Name>  
    <RightNode> 
     <Node> 
      <Name>SomeChildName</Name> 
     </Node> 
    </RightNode>  
    <LeftNode></LeftNode> 

</Node> 

我能夠構建有三個,但是當我開始輸入子節點,intellicence不會爲我想任何驗證工作,以及在xml上執行。

我曾嘗試以下:

<xsd:element name="RightNode" > 
    <xsd:complexType> 
     <xsd:all> 
      <xs:element ref="Node"> 
     </xsd:all> 
    </xsd:complexType> 
</xsd:element> 

如何解決我的XML模式(XSD文件),以便intellicence繼續與子節點的工作?

回答

1

聽起來像你需要的是一個遞歸XSD。下面是可以爲你工作的例子:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="Node" type="Node"/> 

<xs:complexType name="Node"> 
    <xs:all> 
     <xs:element name="Name" type="xs:string" /> 
     <xs:element name="RightNode" type="Node"/> 
     <xs:element name="LeftNode" type="Node"/> 
    </xs:all> 
</xs:complexType> 

你可以找到另一個類似的問題here覆蓋範圍內的XSD一般遞歸。