精华内容
下载资源
问答
  • import javax.xml.XMLConstants; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; ...

    import javax.xml.XMLConstants;
    import javax.xml.transform.Source;
    import javax.xml.transform.stream.StreamSource;
    import javax.xml.validation.Schema;
    import javax.xml.validation.SchemaFactory;
    import javax.xml.validation.Validator;

    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;

     

     private boolean isXMLValid() {
            boolean flag = true;
            try {
                Source schemaFile = new StreamSource(

    Thread. currentThread ().getContextClassLoader().getResourceAsStream( "schema/PassageReport.xsd" )

    );
              
                SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
                Schema schema = factory.newSchema(schemaFile);
                Validator validator = schema.newValidator();
                validator.validate(new StreamSource(new StringReader(targetXML)));
               
            } catch (Exception e) {
                flag = false;
                logger.error(e.getMessage());
            }

            return flag;
        }

    展开全文
  • 使用架构(XSD)验证XML文件 假使说XML是一个数据库,那么XSD就是这个数据库的结构。由此可见,XSD是如此重要,如果没有它,我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢?那是不可能完成的任务,...

    使用架构(XSD)验证XML文件

     

     

    假使说XML是一个数据库,那么XSD就是这个数据库的结构。由此可见,XSD是如此重要,如果没有它,我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢?那是不可能完成的任务,如果你将XML数据文件当作普通的文本文件去验证的话。

     

    我用下面一个例子来解释如何定义XSD以及如何使用它来验证

     

    1. 首先来看一下我们的数据文件

    <?xml version="1.0" encoding="utf-8" ?>

    <Order>

      <OrderID>10248</OrderID>

      <OrderDate>2009-01-01</OrderDate>

      <Details>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>1</ProductID>

          <Quantity>2</Quantity>

          <UnitPrice>20</UnitPrice>

        </OrderItem>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>1</ProductID>

          <Quantity>2</Quantity>

          <UnitPrice>20</UnitPrice>

        </OrderItem>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>1</ProductID>

          <Quantity>2</Quantity>

          <UnitPrice>20</UnitPrice>

        </OrderItem>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>1</ProductID>

          <Quantity>2</Quantity>

          <UnitPrice>20</UnitPrice>

        </OrderItem>

      </Details>

    </Order>

     

    这是一个典型的订单数据。我们来分析一下这份文档

     •必须有OrderID,而且必须是整数型,integer

     •必须有OrderDate,而且必须是日期型,datetime

     •必须有至少一个OrderItem,这个Item必须包含四部分信息

     •ItemNumber,integer

     •ProductID,integer

     •Quantity,double

     •UnitPrice,double

     

     

     

    2. 我们来定义一个XSD文件。有关XSD的知识很多,有兴趣的朋友可以参考下面这个链接

     

    http://www.w3school.com.cn/schema/index.asp

    <?xml version="1.0" encoding="utf-8"?>

    <xs:schema id="OrderSchema"

        targetNamespace="http://tempuri.org/OrderSchema.xsd"

        elementFormDefault="qualified"

        xmlns="http://tempuri.org/OrderSchema.xsd"

        xmlns:mstns="http://tempuri.org/OrderSchema.xsd"

        xmlns:xs="http://www.w3.org/2001/XMLSchema"

     

      <xs:element name="Order">

        <xs:complexType>

          <xs:sequence>

            <xs:element name="OrderID" type="xs:integer"></xs:element>

            <xs:element name="OrderDate" type="xs:date"></xs:element>

            <xs:element name="Details">

              <xs:complexType>

                <xs:group ref="OrderItemGroup" minOccurs="1" maxOccurs="unbounded"></xs:group>

              </xs:complexType>

            </xs:element>

          </xs:sequence>

        </xs:complexType>

      </xs:element>

     

      <!-- 定义一个OrderItem的复杂类型 -->

      <xs:group name="OrderItemGroup">

        <xs:sequence>

          <xs:element name="OrderItem">

            <xs:complexType>

              <xs:sequence>

                <xs:element name="ItemNumber" type="xs:integer"></xs:element>

                <xs:element name="ProductID" type="xs:integer"></xs:element>

                <xs:element name="Quantity" type="xs:double"></xs:element>

                <xs:element name="UnitPrice" type="xs:double"></xs:element>

              </xs:sequence>

            </xs:complexType>

          </xs:element>

        </xs:sequence>

      </xs:group>

    </xs:schema> 【备注】这个架构也可以通过Visual Studio的“XML”菜单=》“创建架构”得到。

     

    3. 下面来看看如何使用该架构对数据文件进行验证

     

    .NET Framework并没有提供简单易行的验证方法,我们需要写一些代码

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default"%>

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head runat="server">

        <title></title>

    </head>

    <body>

        <form id="form1" runat="server">

        <div>

       

         <asp:Button ID="btValidateFile" runat="server" Text="验证文档" OnClick="ValidateFile" />

        </div>

        </form>

    </body>

    </html>

     

    代码文件

    using System;

    using System.Text;

    using System.Xml;

     

    namespace WebApplication1

    {

        public partial class _Default : System.Web.UI.Page

        {

            protected void Page_Load(object sender, EventArgs e)

            {

     

            }

            StringBuilder sb = null;

            protected void ValidateFile(object sender, EventArgs e)

            {

                string dataFile = Server.MapPath("Order.xml");

                string schemaFile = Server.MapPath("OrderSchema.xsd");

                string namespaceUrl = "http://tempuri.org/OrderSchema.xsd";

     

                XmlReaderSettings settings = new XmlReaderSettings();

                settings.ValidationType = ValidationType.Schema;

                settings.Schemas.Add(namespaceUrl, schemaFile);

                settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);

     

                string errorMessage="这不是一个合乎规范的数据文件";

                sb = new StringBuilder();

     

                XmlReader reader = XmlReader.Create(dataFile, settings);

                try

                {

                    reader.MoveToContent();

                    while (reader.Read())

                    {

                        if (reader.NodeType == XmlNodeType.Document && reader.NamespaceURI != namespaceUrl)

                        {

                            Response.Write(errorMessage);

                            break;

                        }

                    }

                }

                catch (XmlException ex)

                {

                    sb.AppendFormat("{0}<br />", ex.Message);

                }

                finally

                {

                    reader.Close();

                }

     

                if (sb.Length == 0)

                    Response.Write("该文档是合法的");

                else

                    Response.Write(sb.ToString());

            }

     

            void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)

            {

                sb.AppendFormat("{0}<br />", e.Message);

            }

        }

    }

     

    准备就绪之后,我们可以立即按下F5键进行调试。因为现在文档确实是合法的,所以点击按钮之后,会输出一个正确的消息。

     

     

     

    我们故意将文档改成下面这样子

    <?xml version="1.0" encoding="utf-8" ?>

    <Order xmlns="http://tempuri.org/OrderSchema.xsd">

      <OrderID>1</OrderID>

      <OrderDate>2009-1-1</OrderDate>

      <Details>

      </Details>

    </Order> 我们没有提供OrderItem,同时,OrderDate的格式是不正确的。(XML里面的日期必须是类似这样的格式:YYYY-MM-DD)此时我们去点击页面中的按钮,就会发现下面这样的错误提示  小结一下:我们可以通过XMLReader的读取,验证XML文档的合法性。关键点在于我们指定给这个XMLReader一些Settings这些代码还可以封装一下,以免更好的重复利用。之前有一位XML方面的MVP也专门写了一个组件,可以方便地做验证。请参考http://msdn.microsoft.com/zh-cn/library/aa468554.aspx

     

     

    4. 对于有命名空间的情况,则会复杂很多

     

    我已经多次提到如果有命名空间的情况,XML的操作(包括验证和转换等等)都会变得更加复杂。但仍然需要面对这个现实

     

    我们假设,XML数据文件是类似下面的格式

    <?xml version="1.0" encoding="utf-8" ?>

    <Order xmlns:d="http://www.xizhang.com">

      <d:OrderID>1</d:OrderID>

      <OrderDate>2009-01-01</OrderDate>

      <Details>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>2</ProductID>

          <Quantity>3</Quantity>

          <UnitPrice>3</UnitPrice>

        </OrderItem>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>2</ProductID>

          <Quantity>3</Quantity>

          <UnitPrice>3</UnitPrice>

        </OrderItem>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>2</ProductID>

          <Quantity>3</Quantity>

          <UnitPrice>3</UnitPrice>

        </OrderItem>

      </Details>

    </Order> 

     

     

    与之前的文档相比,这个文档多了一个命名空间的信息,在OrderID上面,我们加上了命名空间的限定

     

    我们通过点击菜单:“XML”=》“创建架构”来生成架构。它会生成两个文件,分别如下

     

    Order.xsd

    <?xml version="1.0" encoding="utf-8"?>

    <xs:schema xmlns:d="http://www.xizhang.com" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

      <xs:import namespace="http://www.xizhang.com" />

      <xs:element name="Order">

        <xs:complexType>

          <xs:sequence>

            <xs:element ref="d:OrderID" />

            <xs:element name="OrderDate" type="xs:date" />

            <xs:element name="Details">

              <xs:complexType>

                <xs:sequence>

                  <xs:element maxOccurs="unbounded" name="OrderItem">

                    <xs:complexType>

                      <xs:sequence>

                        <xs:element name="ItemNumber" type="xs:unsignedByte" />

                        <xs:element name="ProductID" type="xs:unsignedByte" />

                        <xs:element name="Quantity" type="xs:unsignedByte" />

                        <xs:element name="UnitPrice" type="xs:unsignedByte" />

                      </xs:sequence>

                    </xs:complexType>

                  </xs:element>

                </xs:sequence>

              </xs:complexType>

            </xs:element>

          </xs:sequence>

        </xs:complexType>

      </xs:element>

    </xs:schema>

     

     

    还有一个Order1.xsd

    <?xml version="1.0" encoding="utf-8"?>

    <xs:schema xmlns:tns="http://www.xizhang.com" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.xizhang.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">

      <xs:element name="OrderID" type="xs:unsignedByte" />

    </xs:schema>

     

     

    我们注意到,在Order.xsd中,用了一个ref的方式,实现了一个元素的引用。其他它是引用了Order1.xsd中的OrderID元素。

     

    但是,我们怎么知道是这样的引用关系呢?我们并没有在Order.XSD中看到这个关系呢

     

    其实是有的。你可以在Order.xsd文件中,按下F4键,查看属性

     

     

     

    点击架构右侧的那个按钮

     

     

     

    下面我们来测试一下,带有命名空间的情况下如何验证

     •首先,你应该选中Order.xsd和Order1.xsd,并将它们保存到项目根目录。因为他们默认是被创建在临时文件夹的

     •为Order.xsd添加一个TargetNamespace

    <?xml version="1.0" encoding="utf-8"?>

    <xs:schema xmlns:d="http://www.xizhang.com" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs=http://www.w3.org/2001/XMLSchema targetNamespace="http://www.xizhang.com">

      <xs:import namespace="http://www.xizhang.com" />

      <xs:element name="Order">

        <xs:complexType>

          <xs:sequence>

            <xs:element ref="d:OrderID" />

            <xs:element name="OrderDate" type="xs:date" />

            <xs:element name="Details">

              <xs:complexType>

                <xs:sequence>

                  <xs:element maxOccurs="unbounded" name="OrderItem">

                    <xs:complexType>

                      <xs:sequence>

                        <xs:element name="ItemNumber" type="xs:unsignedByte" />

                        <xs:element name="ProductID" type="xs:unsignedByte" />

                        <xs:element name="Quantity" type="xs:unsignedByte" />

                        <xs:element name="UnitPrice" type="xs:unsignedByte" />

                      </xs:sequence>

                    </xs:complexType>

                  </xs:element>

                </xs:sequence>

              </xs:complexType>

            </xs:element>

          </xs:sequence>

        </xs:complexType>

      </xs:element>

    </xs:schema>

     

     •修改一下代码

     

     

                string dataFile = Server.MapPath("Order.xml");

                string schemaFile = Server.MapPath("Order.xsd");

                string namespaceUrl = "http://www.xizhang.com";

     

                XmlReaderSettings settings = new XmlReaderSettings();

                settings.ValidationType = ValidationType.Schema;

                settings.Schemas.Add(namespaceUrl, schemaFile);

                settings.Schemas.Add(namespaceUrl, Server.MapPath("Order1.xsd"));//这里要加第二个文件   同样道理,我们故意去修改一下数据文件<?xml version="1.0" encoding="utf-8" ?>

    <Order xmlns:d="http://www.xizhang.com">

      <d:OrderID>1</d:OrderID>

      <OrderDate>2009/1/1</OrderDate>

      <Details>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>2</ProductID>

          <Quantity>3</Quantity>

          <UnitPrice>3</UnitPrice>

        </OrderItem>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>2</ProductID>

          <Quantity>3</Quantity>

          <UnitPrice>3</UnitPrice>

        </OrderItem>

        <OrderItem>

          <ItemNumber>1</ItemNumber>

          <ProductID>2</ProductID>

          <Quantity>3</Quantity>

          <UnitPrice>3</UnitPrice>

        </OrderItem>

      </Details>

    </Order>  

     

    小结:

     

    这样我们就完成了对包含有命名空间的XML数据文件的验证工作。这个操作需要两个XML架构文件,他们之间形成一个引用关系。如果有多个不同的命名空间,则可能会有多个辅助的架构文件。

     

     

     

    需要注意的是,在Order.xsd中,最好是用下面的语法去定义schemaLocation

     

    <xs:import namespace="http://www.xizhang.com" schemaLocation="Order1.xsd" />

     

    如果这样定义了,代码中就可以省略掉添加第二个架构文件的代码

     

    //settings.Schemas.Add(namespaceUrl, Server.MapPath("Order1.xsd"));//这里要加第二个文件

     

     

     本文由作者:陈希章 于 2009/6/19 23:17:33 发布在:http://www.cnblogs.com/chenxizhang/

     本文版权归作者所有,可以转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    更多博客文章,以及作者对于博客引用方面的完整声明以及合作方面的政策,请参考以下站点:陈希章的博客中心

    转载于:https://www.cnblogs.com/sunxi/p/3477927.html

    展开全文
  • XMLSpy中,我们知道如何手动对一个XML文件进行XSD验证,那么如何通过代码进行验证呢?并返回错误信息呢 以下代码给出一种具体的方法 首先在POM中添加以下依赖 &lt;!-- dom4j XML工具包 --&gt; &...

    在XMLSpy中,我们知道如何手动对一个XML文件进行XSD验证,那么如何通过代码进行验证呢?并返回错误信息呢

    以下代码给出一种具体的方法

    首先在POM中添加以下依赖

    <!-- dom4j XML工具包 -->
    		<dependency>
    			<groupId>dom4j</groupId>
    			<artifactId>dom4j</artifactId>
    			<version>1.6.1</version>
    		</dependency>
    		<dependency>
    			<groupId>jaxen</groupId>
    			<artifactId>jaxen</artifactId>
    			<version>1.1.4</version>
    		</dependency>

    然后具体方法参照如下

        String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
    	
    	String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
    	
    	String SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
    	
    	String FILE_PREFIX = "file:";
    	
    	String ATTRIBUTE_LINE = "line";		
            StringBuilder errorMsg = new StringBuilder();
    		try {
    			XMLErrorHandler errorHandler = new XMLErrorHandler();
    			SAXParserFactory factory = SAXParserFactory.newInstance();
    			factory.setValidating(true);
    			factory.setNamespaceAware(true);
    			SAXParser parser = factory.newSAXParser();
    			Document xmlDocument = document;
    			parser.setProperty(SCHEMA_LANGUAGE, XML_SCHEMA);
    			parser.setProperty(SCHEMA_SOURCE, FILE_PREFIX + xsdFileName);
    			SAXValidator validator = new SAXValidator(parser.getXMLReader());
    			validator.setErrorHandler(errorHandler);
    			validator.validate(xmlDocument);
    			if (errorHandler.getErrors().hasContent()) {
    				List<Element> elements = errorHandler.getErrors().elements();
    				for (Element element : elements) {
    					String line = String.valueOf(Integer.parseInt(element.attributeValue(ATTRIBUTE_LINE)) - 1);
    					String text = element.getText();
    					errorMsg.append("(第 " + line + "行出现错误) " + text);
    				}
    				errorMsg.append("XML文件通过XSD文件校验失败!");
    			} 
    		} catch (SAXException | ParserConfigurationException e) {
    			logger.error("验证出现异常!",e);
    			errorMsg.append("验证出现异常!" + e.getMessage());
    		}
    		return errorMsg.toString();

     

    展开全文
  • 读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用。定义XSD的过程就是类似设计表结构的过程,二者也可以相互转化。本文讨论了如何定义XSD文件(XML Schema),然后自动生成实体类,最后生成...
    项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据;读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用。

    定义XSD的过程就是类似设计表结构的过程,二者也可以相互转化。

    本文讨论了如何定义XSD文件(XML Schema),然后自动生成实体类,最后生成XML的过程,以及如何根据XSD验证XML文件的合法性。以供大家做项目时参考。

    1. 首先在VS2005中添加一个XSD文件。例子XSD可以参考:

    http://www.15seconds.com/issue/031209.htm

    http://www.cduce.org/manual_schema_samples.html

     

    2. 使用VS2005工具XSD.exe(SDK\v2.0\Bin\xsd.exe)自动生成实体类:

    xsd /c /namespace:myCompany /language:CS temp1.xsd

    也可以生成DataSet类型的类:

    xsd /dataset /language:CS temp1.xsd

     ( 类文件和XSD之间可以相互转换,也就是说,你也可以先生成类,然后自动生成XSD)

        自动读取XML数据到实体类:
        

    XmlSerializer xs = new XmlSerializer(typeof(myClassType));
    using (FileStream fs = new FileStream(XmlFilePath, FileMode.Open))
    {
        return (myClassType)xs.Deserialize(fs);
    }

          
    3. 如何由XML生成XSD?

       - 可以用工具,如XMLSpy,首先打开XML, 然后DTD/Schema -> Generate DTD/Schema, 选择W3c Sehcma即可。

       - 此方法不一定能生成确切满足需求的XSD,另需修改。


    4. 如何由XSD生成XML?

       - 可以用其他工具,如XMLSpy,DTD/Schema -> Generate sample XML file...
      
       - 可以由XSD生成类,然后写代码实例化这个类,最后序列化为XML

       - 如何自动给类每个属性设置一个空值:(用反射的方法)

         代码示例:

    /// <summary>
            /// Get all properties and set default value
            /// </summary>
            /// <typeparam name="T">Type</typeparam>
            /// <param name="item">Object</param>
            private static void ReflctProperties<T>(T item)
            {
                PropertyInfo[] pty = typeof(T).GetProperties();
                Type t = item.GetType();

                if (pty != null)
                {
                    foreach (PropertyInfo info in pty)
                    {
                        if (!info.CanWrite) continue;

                        if (info.PropertyType == typeof(String))
                        {
                            t.GetProperty(info.Name).SetValue(item, String.Empty, null);
                        }
                        if (info.PropertyType == typeof(Boolean))
                        {
                            t.GetProperty(info.Name).SetValue(item, true, null);
                        }
                    }
                }
            }

        - 反射读取类的属性:
     

    public static object GetProperty<T>(T item, string PropertyName)
    {
         PropertyInfo propertyInfo = item.GetType().GetProperty(PropertyName);
         if (propertyInfo != null)
         {                
             return propertyInfo.GetValue(item, null);
         }
         return null;
    }



       - 如何序列化为XML?

    /// <summary>
            /// Serialize class instance to XML file
            /// </summary>
            /// <typeparam name="T">type</typeparam>
            /// <param name="XMLFileToCreate">XMLFileToCreate</param>
            /// <param name="instance">class instance</param>
            public void Serialize<T>(string XMLFileToCreate, T instance)
            {
                if (instance == null) return;

                XmlSerializer xs = new XmlSerializer(typeof(T));
                using (StreamWriter sw = new StreamWriter(XMLFileToCreate))
                {
                    xs.Serialize(sw, instance);
                }
            }

     

         (Link: 使用XMLSerializer类持久化数据 )

     

     


    5. 如何使用XSD来验证XML文件合法性:
       
       - 使用XMLSpy,首先Assign XSD,然后验证 (其实就是设置XML里面引用的schema,注意schema可能引用其他的schema)
      
       - 代码中验证:

        #region Validate XML against XSD

        public class Validator
        {
            private string errMsg;

            /// <summary>
            /// validation Error Msg
            /// </summary>
            public string validationErrMsg
            {
                get { return errMsg; }
                set { errMsg = value; }
            }
            
           
            /// <summary>
            /// Validate XML against schema
            /// </summary>
            /// <param name="XSD"></param>
            /// <param name="XMLFile"></param>
            /// <param name="LocationDefined"></param>
            /// <returns></returns>
            public bool Validate(string XSD, string XMLFile, bool LocationDefined)
            {
                bool isValid = true;

                try
                {
                    Stream schemaFile = null;

                    XmlReaderSettings settings = new XmlReaderSettings();
                    ValidationEventHandler SchemaValidationEventHandler = new ValidationEventHandler(ValidationCallBack);

                    settings.ValidationType = ValidationType.Schema;
                    settings.ValidationFlags |= XmlSchemaValidationFlags.AllowXmlAttributes;
                    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
                    settings.ValidationEventHandler += SchemaValidationEventHandler;

                    if (LocationDefined == true)
                    {
                        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
                        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
                    }
                    else
                    {
                        schemaFile = new FileStream(XSD, FileMode.Open);
                        
                        XmlSchema tmsSchema = XmlSchema.Read(schemaFile, SchemaValidationEventHandler);

                        settings.Schemas.Add(tmsSchema);
                    }

                    using (XmlReader reader = XmlReader.Create(XMLFile, settings))
                    {
                        string test;

                        while (reader.Read() && isValid == true)
                        {
                            test = reader.Name;
                        }
                    };

                    if (schemaFile != null)
                    {
                        schemaFile.Close();
                    }
                }
                catch (Exception e)
                {
                    validationErrMsg += "Exception occured when validating. " + e.Message;

                    isValid = false;
                }

                return isValid;
            }

            /// <summary>
            /// Display any warnings or errors.
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="args"></param>
            public void ValidationCallBack(object sender, ValidationEventArgs args)
            {
                if (args.Severity == XmlSeverityType.Warning)
                {
                    validationErrMsg += "Matching schema not found. No validation occurred." + args.Message;
                    validationErrMsg = args.Message;
                }
                else
                {
                    validationErrMsg += "\nValidation error: " + args.Message;

                    validationErrMsg = args.Message;
                }
            }
        }
        #endregion
     
     
    原文链接:http://www.cnblogs.com/Mainz/archive/2007/12/16/996857.html

    转载于:https://www.cnblogs.com/zhulinyixuan/p/3799253.html

    展开全文
  • 读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用。 定义XSD的过程就是类似设计表结构的过程,二者也可以相互转化。 本文讨论了如何定义XSD文件(XML Schema),然后自动生成实体类,最后...
  • 读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用。 定义XSD的过程就是类似设计表结构的过程,二者也可以相互转化。 本文讨论了如何定义XSD文件(XML Schema),然后自动生成实体类,...
  • 以前验证XML一直使用dtd的,今天尝试着用xsd作验证,可是网上的例子一直跑不起来。折腾了半天才发现是例子里面对于XML文件的命名空间没有设置清楚,这里解决下方案记录:   [note.xml]   &lt;?xml version...
  • Spring文件中的xsd文件

    2019-03-07 09:52:17
    Spring默认在启动时是要加载XSD文件验证xml文件的,所以如果有的时候断网了,或者一些开源软件切换域名,那么就很容易碰到应用启动不了。为了防止这种情况,Spring提供了一种机制,默认从本地加载XSD文件。 例如...
  • 如何使用XSD

    千次阅读 2016-06-03 21:07:17
    XSD是XML Schema Definition的简称,顾名思义,它是xml语言来定义和验证xml数据格式的文件,后缀.xsd XML Schema可以用来定义什么?: 定义可出现在文档中的元素定义可出现在文档中的属性定义哪个元素是子...
  • 读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用。 定义XSD的过程就是类似设计表结构的过程,二者也可以相互转化。 本文讨论了如何定义XSD文件(XML Schema),然后自动生成实体...
  • XML模式和.NET <br>11.1 在Visual Studio.NET中利用模式编辑器 11.1.1 从XML文档中生成模式 11.1.2 通过编程方式验证XML 11.1.3 处理异常和利用ValidationEventHandler 11.2 XSD和用xsd.exe进行串行...
  • \r\n 5.1.5 使用内嵌模式验证XML \r\n 5.1.6 使用DTD \r\n 5.1.7 使用Visual Studio 2005创建XML模式 \r\n 5.1.8 .NET模式对象模型(SOM) \r\n 5.1.9 通过程序从XML文件推断XSD模式 \r\n ……\r\n第7章 XSLT...
  • create-drop 加载hibernate时创建,退出是删除表结构 update 加载hibernate自动更新数据库结构 以上4个属性对同一配置文件下所用有的映射表都起作用 总结: 1.请慎重使用此参数,没必要就不要随便。 2...
  • 目前maven和jersey-quickstart-webapp框架实现了http形式的get请求和post请求,已经部署到tomcat上了,利用postman验证可以传输数据, 但是项目要求不用http而是https的,该如何实现呢? 代码如下 ## ...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

如何用xsd文件验证xml