【问题标题】:XMl string not being Validated with XSDXMl 字符串未使用 XSD 验证
【发布时间】:2014-05-08 10:00:16
【问题描述】:

我有一个有效的 XSD 和具有不同架构的 xml 字符串。 如果我获取 xml 字符串并尝试通过 xmldocument.validate 使用 xsd 模式进行验证,它不会验证。

dim tmpdoc as new xmldocument()    
dim abc as string= file.readalltext("books-debug.xml")
tmpdoc.schemas.add(nothing,"New.xsd")
Dim eventHandler As New ValidationEventHandler(AddressOf ValidationEventHandler)

    tmpDoc.Validate(eventHandler)

End Sub


Private Shared Sub ValidationEventHandler(ByVal sender As Object, ByVal e As    ValidationEventArgs)
    Select Case e.Severity
        Case XmlSeverityType.[Error]
            MessageBox.Show("Error: {0}" + e.Message)
            Exit Select
        Case XmlSeverityType.Warning
            MessageBox.Show("Warning {0}" + e.Message)
            Exit Select
    End Select

End Sub

用于测试的xml books-debug.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<bookstore xmlns="http://myspace">
    <debugparameters>
        <parameter>
            <paramname>paramname1</paramname> 
            <description>description1</description> 
            <subsystems>
                <subsystem-id>g</subsystem-id> 
                <subsystem-id>f</subsystem-id> 
                <subsystem-id>d</subsystem-id> 
            </subsystems>
        </parameter>
        <parameter>
            <paramname>paramname2</paramname> 
            <description>description2</description> 
            <subsystems>
                <subsystem-id>f</subsystem-id> 
                <subsystem-id>g</subsystem-id> 
                <subsystem-id>d</subsystem-id> 
            </subsystems>
        </parameter>
        <parameter>
            <paramname>paramname3</paramname> 
            <description>description3</description> 
            <subsystems>
                <subsystem-id>f</subsystem-id> 
                <subsystem-id>g</subsystem-id> 
                <subsystem-id>d</subsystem-id> 
            </subsystems>
        </parameter>
    </debugparameters>
</bookstore>

xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"    targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="writer">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:date" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

【问题讨论】:

  • 您的 XML 只有一个元素与您的 XML 相同。您确定这是正确的实例或架构吗?命名空间也完全不同。
  • 查看下面的架构是否解决了您的问题。如果没有,请用它编辑您的问题(因为您发布的问题不兼容)。
  • 感谢您的回复...我的问题是为什么即使架构与 xml 不同,我也没有收到任何错误

标签: xml vb.net string validation xsd


【解决方案1】:

这不是答案,但它不适合 cmets,它可能有用。您的架构与您的实例完全不兼容。我建议您使用下面的架构(它验证您的实例)作为起点,看看它是否适用于您的系统。如果您仍有问题,您可以删除此问题并编写一个新问题,或者使用兼容的架构编辑您的问题。

您的架构无效。这个验证您发布的实例:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"    
    targetNamespace="http://www.contoso.com/books" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="debugparameters">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="parameter" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="paramname" type="xs:string" />
                                        <xs:element name="description" type="xs:string" />
                                        <xs:element name="subsystems">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="subsystem-id" maxOccurs="unbounded" type="xs:string" />
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

它可以像这样与实例关联:

<bookstore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.contoso.com/books four.xsd" 
    xmlns="http://www.contoso.com/books">
    <debugparameters>
        <parameter>
    ...
</bookstore>

注意命名空间与架构中的targetNamespace 相同。即使声明了所有正确的元素,您的示例也无法工作的原因之一是命名空间不匹配。

【讨论】:

猜你喜欢
  • 2013-07-30
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
相关资源
最近更新 更多