2014-03-28 60 views
1

正在驗證我有一個有效的XSD和XML字符串與不同的架構。 如果我使用xml字符串並通過xmldocument.validate嘗試使用xsd模式進行驗證,則不驗證。用於測試books-debug.xmlXML字符串不是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:

<?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> 
+0

你的XML中只有一個共同的與你的XML元素。你確定這是正確的實例或模式?命名空間也完全不同。 – helderdarocha

+0

查看下面的模式是否解決了您的問題。如果沒有,請用它編輯您的問題(因爲您發佈的內容不兼容)。 – helderdarocha

+0

謝謝你的回覆...我的問題是爲什麼我沒有得到任何錯誤,即使架構不同於xml – projectTesting

回答

0

這不是一個答案,但它不適合在評論,這可能是有用。您的模式與您的實例完全不兼容。我建議你使用下面的模式(它驗證你的實例)作爲一個起點,看看它是否適用於你的系統。如果仍有問題,可以刪除此問題並編寫一個新問題,或使用兼容模式編輯您的問題。

您的模式無效。這一次驗證您發佈的實例:

<?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。即使它聲明瞭所有正確的元素,您的示例也不起作用的原因之一是名稱空間不匹配。

+0

謝謝你的回覆......我的問題是爲什麼我沒有得到任何錯誤,即使架構是不同於xml – projectTesting

+0

在這種情況下,請看看這個:http://stackoverflow.com/questions/771874/how-do-i-validate-a-string-of-xml-against-an-xml-schema -文件 – helderdarocha