隨筆-348  評(píng)論-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校驗(yàn)測試
          *
          * @author leizhimin,2008-9-4 14:42:35
          */

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

              }

              /**
               * 通過XSD(XML Schema)校驗(yàn)XML
               */

              public static void validateXMLByXSD() {
                  String xmlFileName = "Q:\\_dev_stu\\xsdtest\\src\\note.xml";
                  String xsdFileName = "Q:\\_dev_stu\\xsdtest\\src\\note.xsd";
                  try {
                      //創(chuàng)建默認(rèn)的XML錯(cuò)誤處理器
                      XMLErrorHandler errorHandler = new XMLErrorHandler();
                      //獲取基于 SAX 的解析器的實(shí)例
                      SAXParserFactory factory = SAXParserFactory.newInstance();
                      //解析器在解析時(shí)驗(yàn)證 XML 內(nèi)容。
                      factory.setValidating(true);
                      //指定由此代碼生成的解析器將提供對(duì) XML 名稱空間的支持。
                      factory.setNamespaceAware(true);
                      //使用當(dāng)前配置的工廠參數(shù)創(chuàng)建 SAXParser 的一個(gè)新實(shí)例。
                      SAXParser parser = factory.newSAXParser();
                      //創(chuàng)建一個(gè)讀取工具
                      SAXReader xmlReader = new SAXReader();
                      //獲取要校驗(yàn)xml文檔實(shí)例
                      Document xmlDocument = (Document) xmlReader.read(new File(xmlFileName));
                      //設(shè)置 XMLReader 的基礎(chǔ)實(shí)現(xiàn)中的特定屬性。核心功能和屬性列表可以在 [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);
                      //創(chuàng)建一個(gè)SAXValidator校驗(yàn)工具,并設(shè)置校驗(yàn)工具的屬性
                      SAXValidator validator = new SAXValidator(parser.getXMLReader());
                      //設(shè)置校驗(yàn)工具的錯(cuò)誤處理器,當(dāng)發(fā)生錯(cuò)誤時(shí),可以從處理器對(duì)象中得到錯(cuò)誤信息。
                      validator.setErrorHandler(errorHandler);
                      //校驗(yàn)
                      validator.validate(xmlDocument);

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

              /**
               * 通過DTD校驗(yàn)XML
               */

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

          方法二:

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

          public class SchemaValidation {


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

              public static void validate() {
                  try {
                      SchemaValidation demo = new SchemaValidation();
                      // Give the xml(標(biāo)準(zhǔn)化越來越近了) and schema name
                      InputStream xml(標(biāo)準(zhǔn)化越來越近了)String = demo.getClass().getResourceAsStream("GBAInit.xml(標(biāo)準(zhǔn)化越來越近了)");
                      InputStream schemaStr = demo.getClass().getResourceAsStream("GBAInitSchema.xsd");
             
                      SAXReader reader = createSAXReader(schemaStr);
                      System.out.println("XSD parse successfully !");
                     
                      Document document = reader.read(xml(標(biāo)準(zhǔn)化越來越近了)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(標(biāo)準(zhǔn)化越來越近了)Filter(filter);
                  return reader;
              }

          本文來源于 WEB開發(fā)網(wǎng) 原文鏈接:http://www.cncms.com.cn/ajax/9977.htm




          ---------------------------------------------------------
          專注移動(dòng)開發(fā)

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2010-03-11 11:11 TiGERTiAN 閱讀(2109) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 陆川县| 禹城市| 大名县| 太仓市| 台州市| 灵川县| 富宁县| 光泽县| 象山县| 龙门县| 陇川县| 突泉县| 金湖县| 五常市| 涟源市| 子长县| 乌恰县| 葫芦岛市| 定陶县| 瑞安市| 沧州市| 沁源县| 宜兰县| 锦屏县| 惠安县| 治县。| 铁力市| 滦平县| 新宁县| 磴口县| 甘德县| 洛宁县| 佛坪县| 左云县| 平邑县| 浦县| 永靖县| 临安市| 福安市| 惠来县| 洱源县|