隨筆-348  評論-598  文章-0  trackbacks-0

          XML文件
          <?xml version="1.0"?>
          <note
                  xmlns="http://www.w3school.com.cn"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.w3school.com.cn file:///D:/_dev_stu/xsdtest/src/note.xml">

              <to>George</to>
              <from>John</from>
              <heading>Reminder</heading>
              <body>Don't forget the meeting this weekend!</body>
          </note>
           
          XSD文件
          <?xml version="1.0"?>
          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                     targetNamespace="http://www.w3school.com.cn"
                     xmlns="http://www.w3school.com.cn"
                     elementFormDefault="qualified">

              <xs:element name="note">
                  <xs:complexType>
                      <xs:sequence>
                          <xs:element name="to" type="xs:string"/>
                          <xs:element name="from" type="xs:string"/>
                          <xs:element name="heading" type="xs:string"/>
                          <xs:element name="body" type="xs:string"/>
                      </xs:sequence>
                  </xs:complexType>
              </xs:element>

          </xs:schema>
           
          測試代碼
          import org.dom4j.Document;
          import org.dom4j.io.OutputFormat;
          import org.dom4j.io.SAXReader;
          import org.dom4j.io.SAXValidator;
          import org.dom4j.io.XMLWriter;
          import org.dom4j.util.XMLErrorHandler;

          import javax.xml.parsers.SAXParser;
          import javax.xml.parsers.SAXParserFactory;
          import java.io.File;

          /**
          * Java XML校驗測試
          *
          * @author leizhimin,2008-9-4 14:42:35
          */

          public class ValidataXMLTest {
              public static void main(String[] args) {
                  validateXMLByXSD();
                  validateXMLByDTD();

              }

              /**
               * 通過XSD(XML Schema)校驗XML
               */

              public static void validateXMLByXSD() {
                  String xmlFileName = "Q:\\_dev_stu\\xsdtest\\src\\note.xml";
                  String xsdFileName = "Q:\\_dev_stu\\xsdtest\\src\\note.xsd";
                  try {
                      //創建默認的XML錯誤處理器
                      XMLErrorHandler errorHandler = new XMLErrorHandler();
                      //獲取基于 SAX 的解析器的實例
                      SAXParserFactory factory = SAXParserFactory.newInstance();
                      //解析器在解析時驗證 XML 內容。
                      factory.setValidating(true);
                      //指定由此代碼生成的解析器將提供對 XML 名稱空間的支持。
                      factory.setNamespaceAware(true);
                      //使用當前配置的工廠參數創建 SAXParser 的一個新實例。
                      SAXParser parser = factory.newSAXParser();
                      //創建一個讀取工具
                      SAXReader xmlReader = new SAXReader();
                      //獲取要校驗xml文檔實例
                      Document xmlDocument = (Document) xmlReader.read(new File(xmlFileName));
                      //設置 XMLReader 的基礎實現中的特定屬性。核心功能和屬性列表可以在 [url]http://sax.sourceforge.net/?selected=get-set[/url] 中找到。
                      parser.setProperty(
                              "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
                              "http://www.w3.org/2001/XMLSchema");
                      parser.setProperty(
                              "http://java.sun.com/xml/jaxp/properties/schemaSource",
                              "file:" + xsdFileName);
                      //創建一個SAXValidator校驗工具,并設置校驗工具的屬性
                      SAXValidator validator = new SAXValidator(parser.getXMLReader());
                      //設置校驗工具的錯誤處理器,當發生錯誤時,可以從處理器對象中得到錯誤信息。
                      validator.setErrorHandler(errorHandler);
                      //校驗
                      validator.validate(xmlDocument);

                      XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
                      //如果錯誤信息不為空,說明校驗失敗,打印錯誤信息
                      if (errorHandler.getErrors().hasContent()) {
                          System.out.println("XML文件通過XSD文件校驗失敗!");
                          writer.write(errorHandler.getErrors());
                      } else {
                          System.out.println("Good! XML文件通過XSD文件校驗成功!");
                      }
                  } catch (Exception ex) {
                      System.out.println("XML文件: " + xmlFileName + " 通過XSD文件:" + xsdFileName + "檢驗失敗。\n原因: " + ex.getMessage());
                      ex.printStackTrace();
                  }
              }

              /**
               * 通過DTD校驗XML
               */

              public static void validateXMLByDTD() {
                  //todo:暫時不用,以后再說吧
              }
          }
           
          運行結果
          Good! XML文件通過XSD文件校驗成功!

          方法二:

          最近對Schema 驗證研究了一下, 代碼如下:
          所需JAR包需要自己下載(版本一定要正確)

          public class SchemaValidation {


              public static void main(String[] args) {
                  validate();
              }

              public static void validate() {
                  try {
                      SchemaValidation demo = new SchemaValidation();
                      // Give the xml(標準化越來越近了) and schema name
                      InputStream xml(標準化越來越近了)String = demo.getClass().getResourceAsStream("GBAInit.xml(標準化越來越近了)");
                      InputStream schemaStr = demo.getClass().getResourceAsStream("GBAInitSchema.xsd");
             
                      SAXReader reader = createSAXReader(schemaStr);
                      System.out.println("XSD parse successfully !");
                     
                      Document document = reader.read(xml(標準化越來越近了)String);
                      System.out.println("Successfully validation .. . ");
                  } catch (DocumentException e) {
                      System.out.println("Exception occurred: " + e);
                      Throwable nestedException = e.getNestedException();
                      if (nestedException != null) {
                          System.out.println("NestedException: " + nestedException);
                          nestedException.printStackTrace();
                      } else {
                          e.printStackTrace();
                      }
                  } catch (Throwable t) {
                      System.out.println("Exception occurred: " + t);
                      t.printStackTrace();
                  }
              }

              /** Registers the Verifier with the SAXReader */
              protected SAXReader createSAXReader(InputStream schemaURI) throws Exception {

                  System.out.println("Loaded schema document: " + schemaURI);

                  // use autodetection of schemas
                  VerifierFactory factory = new com.sun.msv.verifier.jarv.TheFactoryImpl();
                  Schema schema = factory.compileSchema(schemaURI);

                  Verifier verifier = schema.newVerifier();
                  verifier.setErrorHandler(new ErrorHandler() {
                      public void error(SAXParseException e) {
                          System.out.println("ERROR: " + e);
                      }

                      public void fatalError(SAXParseException e) {
                          System.out.println("FATAL: " + e);
                      }

                      public void warning(SAXParseException e) {
                          System.out.println("WARNING: " + e);
                      }
                  });

                  // now install the verifying filter
                  VerifierFilter filter = verifier.getVerifierFilter();
                  SAXReader reader = new SAXReader();
                  reader.setxml(標準化越來越近了)Filter(filter);
                  return reader;
              }

          本文來源于 WEB開發網 原文鏈接:http://www.cncms.com.cn/ajax/9977.htm




          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2010-03-11 11:11 TiGERTiAN 閱讀(2109) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 化德县| 昌江| 望奎县| 青铜峡市| 特克斯县| 湟源县| 牙克石市| 渭源县| 香河县| 海淀区| 乌兰察布市| 娱乐| 绥滨县| 邹平县| 盱眙县| 黄冈市| 紫金县| 广汉市| 古蔺县| 安吉县| 曲阜市| 建始县| 农安县| 唐海县| 蓝山县| 太谷县| 观塘区| 临安市| 瓦房店市| 边坝县| 静海县| 叙永县| 津南区| 鹤壁市| 余庆县| 中宁县| 军事| 游戏| 嘉定区| 正镶白旗| 黄山市|