我是架构验证的新手,我有一个使用"ValidationType.Schema"执行架构验证的代码。
在我的输出 XML 文件中有一些可选的标签,为了验证这一点,我将相应的 XSD 文件标签设置为"MinOccurs = 0",但是我仍然收到架构验证失败错误。
我无法弄清楚 XSD 中提到的标签的序列是否也与 XML 文件中标签的序列有关,或者这是否仅验证存在。
例如:
案例 1:
---输出 XML---<tag1>1</tag1>
<tag2>2</tag2>
----XSD 文件<tag1>
<tag2>
案例 2:
---输出 XML---<tag2>1</tag2>
<tag1>2</tag1>
----XSD 文件<tag1>
<tag2>
其中哪一个会失败?如果有的话?
我使用验证类型作为"验证类型架构"
感谢您的帮助。
@user1705851,节点顺序很重要,因为元素可以具有相同的名称,但是您可以通过在XSD中使用所有atribute 来避免这种情况。下面给出了节点的工作代码。
Imports System.Xml.Schema
Module Module1
Dim errors As Boolean = False
Sub Main()
Dim xsdMarkup As XElement = _
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<xsd:element name='Root'>
<xsd:complexType>
<xsd:all>
<xsd:element name='tag1' minOccurs='0' maxOccurs='1'/>
<xsd:element name='tag2' minOccurs='0' maxOccurs='1'/>
</xsd:all>
</xsd:complexType>
</xsd:element>
Dim schemas As XmlSchemaSet = New XmlSchemaSet()
schemas.Add("", xsdMarkup.CreateReader)
Dim doc1 As XDocument = _
<?xml version='1.0'?>
<Root>
<tag1>1</tag1>
<tag2>2</tag2>
</Root>
Dim doc2 As XDocument = _
<?xml version='1.0'?>
<Root>
<tag2>1</tag2>
<tag1>2</tag1>
</Root>
Console.WriteLine("Validating doc1")
errors = False
doc1.Validate(schemas, AddressOf XSDErrors)
Console.WriteLine("doc1 {0}", IIf(errors = True, "did not validate", "validated"))
Console.WriteLine()
Console.WriteLine("Validating doc2")
errors = False
doc2.Validate(schemas, AddressOf XSDErrors)
Console.WriteLine("doc2 {0}", IIf(errors = True, "did not validate", "validated"))
Console.ReadLine()
End Sub
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)
Console.WriteLine("{0}", e.Message)
errors = True
End Sub
End Module