2014-03-28 92 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