ValidationType.Schema validation




我是架构验证的新手,我有一个使用"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

最新更新