我有课:
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中具有智慧,并且我能够创建以下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文件),以便智能继续与子节点一起使用?
答案 0 :(得分: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内的一般递归。