0

私はクラスを持っています:

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>

そのおかげで、私はビジュアル スタジオに精通しており、次の 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>

その 3 つを構築することはできますが、子ノードの入力を開始すると、xml で実行したい検証と同様にインテリジェンスが機能しません。

私は次のことを試しました:

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

インテリジェンスが引き続き子ノードで機能するように、xml スキーマ (xsd ファイル) を修正するにはどうすればよいですか?

4

1 に答える 1

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>

XSD 内の一般的な再帰をカバーする別の同様の質問をここで見つけることができます。

于 2013-05-09T15:17:48.467 に答える