[英]XMl string not being Validated with XSD
我有一個有效的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
用於測試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 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
相同。 即使已聲明所有正確的元素,您的示例也不起作用的原因之一是名稱空間不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.