0
是否可以创建一个用于验证(未知)嵌套结构的XSD? 最近,我改变了我的XML数据是分层c#使用XSD在未知的嵌套元素上验证XML
<root>
<record Object_Number="1" Object_Level="1" Object_Heading="Introduction" Object_Text="" Milestones="" Unique_ID="" Field_type="Info" SG_attribute="" Object_Identifier="1" Object_URL="doors://D1DDBAPP04:36677/?version=2&prodID=0&view=0000001a&urn=urn:telelogic::1-432aa0956f684cff-O-1-00028f60">
<record Object_Number="1.1" Object_Level="2" Object_Heading="What is " Object_Text="" Milestones="" Unique_ID="" Field_type="Info" SG_attribute="" Object_Identifier="23" Object_URL="doors://D1DDBAPP04:36677/?version=2&prodID=0&view=0000001a&urn=urn:telelogic::1-432aa0956f684cff-O-23-00028f60">
<record Object_Number="1.1.0-1" Object_Level="3" Object_Heading="" Object_Text="This document is, in fact, a database that summarizes specification and different aspects of diagnostic functions implemented in the system." Milestones="" Unique_ID="" Field_type="Info" SG_attribute="" Object_Identifier="24" Object_URL="doors://D1DDBAPP04:36677/?version=2&prodID=0&view=0000001a&urn=urn:telelogic::1-432aa0956f684cff-O-24-00028f60"></record></record>
<record Object_Number="1.2" Object_Level="2" Object_Heading="Review Checklist"
这是因为原始数据是分层的,更有意义的利用XML嵌套的能力,而不是简单的记录。
所以现在我有嵌套
唯一已知的是,每个记录有精确的属性,我想检查和现场错误,如果他们中的一个不正确的(不一致),属性列表和/或不正确的值。
对于老(纯记录,而不是嵌套的)我用这个验证
xdoc = XDocument.Load(myXml);
string xsdMarkup = @"
<xs:schema attributeFormDefault='unqualified' elementFormDefault='qualified' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:element name='root'>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs='1' maxOccurs='unbounded' name='record'>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs='1' maxOccurs='1' name='Object_Number' type='xs:string' />
<xs:element minOccurs='1' maxOccurs='1' name='Object_Level' type='xs:unsignedByte' />
<xs:element minOccurs='1' maxOccurs='1' name='Object_Heading' type='xs:string' />
<xs:element minOccurs='1' maxOccurs='1' name='Object_Text' type='xs:string' />
<xs:element minOccurs='1' maxOccurs='1' name='Milestones' type='xs:string' />
<xs:element minOccurs='1' maxOccurs='1' name='Unique_ID' type='xs:string' />
<xs:element minOccurs='1' maxOccurs='1' name='Field_type' type='xs:string' />
<xs:element minOccurs='1' maxOccurs='1' name='SG_attribute' type='xs:string' />
<xs:element minOccurs='1' maxOccurs='1' name='Object_Identifier' type='xs:unsignedShort' />
<xs:element minOccurs='1' maxOccurs='1' name='Object_URL' type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
";
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));
string msg = "";
xdoc.Validate(schemas, (o, err) =>
{
msg += err.Message;
//Console.WriteLine("{0}", err.Message);
//errors = true;
});
if (msg == "")
e.Result = true;
我与Visual Studio生成的XSD架构。
现在,对于分层数据,生成的XSD似乎遵循的深层结构是罚款知道水平深处,但失败的另一个深
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="record">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="record">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="record">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="record">
<xs:complexType>
<xs:attribute name="Object_Number" type="xs:string" use="required" />
<xs:attribute name="Object_Level" type="xs:unsignedByte" use="required" />
<xs:attribute name="Object_Heading" type="xs:string" use="required" />
<xs:attribute name="Object_Text" type="xs:string" use="required" />
<xs:attribute name="Milestones" type="xs:string" use="required" />
<xs:attribute name="Unique_ID" type="xs:string" use="required" />
<xs:attribute name="Field_type" type="xs:string" use="required" />
<xs:attribute name="SG_attribute" type="xs:string" use="required" />
<xs:attribute name="Object_Identifier" type="xs:unsignedShort" use="required" />
<xs:attribute name="Object_URL" type="xs:string" use="required" />
</xs:complexType>
...
...
...
因此,可以检查嵌套方案与XSD?
非常感谢提示,
XSD架构可以递归结构:http://stackoverflow.com/q/148988/891715 – Arie