例如有如下xml文件
<?xml version="1.0" encoding="utf-8" ?>
<TreeView Version="1.0" xmlns="http://example.books.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.books.com SchemaTest.xsd">
<Position Detail="1">
<PositionName>1</PositionName>
<SubPosition Detail="2">
<PositionName>2</PositionName>
<SubPosition Detail="3">
<PositionName>3</PositionName>
<SubPosition Detail="4">
<PositionName>4</PositionName>
</SubPosition>
</SubPosition>
</SubPosition>
</Position>
</TreeView>
每个SubPosition 都可以包含自己
那么schema应该怎么写了
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://example.books.com" xmlns="http://example.books.com" targetNamespace="http://example.books.com" elementFormDefault="qualified">
<xs:element name="TreeView">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="Position" type="PositionType"/>
</xs:sequence>
<xs:attribute name="Version" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:complexType name="PositionType">
<xs:sequence>
<xs:element name="PositionName" type="xs:string"/>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="SubPosition" type="PositionType"/>
</xs:sequence>
</xs:sequence>
<xs:attribute name="Detail" type="xs:string"/>
</xs:complexType>
</xs:schema>
事例二
<?xml version="1.0" encoding="utf-8" ?>
<TreeNode text="系统导航" value="0A" description="系统导航" url="Default.aspx" xmlns="http://example.books.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.books.com SchemaTest.xsd">
<TreeNode text="系统管理" value="0A" description="系统管理" url="">
<TreeNode text="角色权限管理" value="0A0A" description="角色权限管理" url="./Admin/ManagerRole.aspx" />
<TreeNode text="常量表管理" value="0A0B" description="常量表管理" url="./Admin/ManageCodeTables.aspx"/>
<TreeNode text="日志管理" value="0A" description="日志管理" url="./Admin/ExceptionLogViewer.aspx"/>
</TreeNode>
<TreeNode text="用户管理" value="0B" description="用户管理" url="./User/ManageUserInfo.aspx"/>
</TreeNode>
和
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://example.books.com" xmlns="http://example.books.com" targetNamespace="http://example.books.com" elementFormDefault="qualified">
<xs:element name="TreeNode">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="1">
<xs:element name="TreeNode" type="TreeNodeType"/>
</xs:sequence>
<xs:attribute name="text" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
<xs:attribute name="description" type="xs:string" use="required" />
<xs:attribute name="url" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:complexType name="TreeNodeType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="TreeNode" type="TreeNodeType"/>
</xs:sequence>
<xs:attribute name="text" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
<xs:attribute name="description" type="xs:string" use="required" />
<xs:attribute name="url" type="xs:string" use="required" />
</xs:complexType>
</xs:schema>
C#的验证代码:
string schemafile = this.textBoxschema.Text.Trim();
string xmlfile = this.textBoxxml.Text.Trim();
XmlSchemaSet schema = new XmlSchemaSet();
schema.Add(null, XmlReader.Create(schemafile));
XDocument doc = XDocument.Load(xmlfile);
doc.Validate(schema, (senderParam, eParam) => {
richTextBoxResult.Text = eParam.Message;
isValid = false;
}, true);