Spring的xml解析基礎之校驗xml的元素

spring的xml解析校驗,有兩種方式。

第一種,是在xml裏指定對應的標籤空間命名,這個校驗主要的作用就是爲了提醒我們在寫入時候應該注意的事項。

第二種,是解析的時候,使用代碼解析,這時候的解析是必要的,因爲如果沒有這時候的解析,會導致沒有按照你規定格式xml也能被解析,從而導致程序出錯。

使用代碼解析案例:

使用代碼校驗有兩種方式,一個是針對document類型

下面這個是scheam的校驗,使用該校驗就要啓用SchemaFactory來創建一個Scheam對象

以spring的beans和contexts的校驗爲例

        /**
         * 提供驗證,驗證beans的
         */
        URL beansUrl=new URL("http://www.springframework.org/schema/beans/spring-beans-3.2.xsd");//這個代表的校驗文件
        String beansPublicId="http://www.springframework.org/schema/beans";//這個是命名空間標識符

        InputSource so1=new InputSource(beansUrl.openStream());
        
        so1.setSystemId(beansPublicId);
        so1.setSystemId(systemId);
        Source beansSource=new SAXSource(so1);   

 

     

         /**
         * 提供驗證,驗證Context的
         */

        URL contextUrl=new URL("http://www.springframework.org/schema/context/spring-context-3.2.xsd");
        
        String contextPublicId="http://www.springframework.org/schema/context";
        
        InputSource contextSo=new InputSource(contextUrl.openStream());
        
        contextSo.setEncoding("UTF-8");
        
        contextSo.setPublicId(contextPublicId);

        Source contextSource=new SAXSource(contextSo);
        
          /**
         * 將合成的校驗組成一個數組,放入到校驗集合裏
         */
        Source[] sources={beansSource,contextSource};

       /**
         * 創建一個約束工廠,java提供了多個,因此需要選取一個,我們使用的w3c
         */
        SchemaFactory sf=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        /**
         * 將資源注入到校驗器
         */
        Schema schema=sf.newSchema(sources);

 

      接下來要創建解析器了,無論是SAX形式的,還是Document形式的,都必須要要執行一個代碼,以jaxp提供的dom解析爲例

     DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
        /**
         * 如果是使用scheam,這一行是必須要開啓的,表示支持命名空間
         */
        documentBuilderFactory.setNamespaceAware(false);
        /**
         * 這一行代碼無需開啓,如果開啓的話,會和scheam形式衝突,因爲該模式支支持DTD模式的校驗
         */
        documentBuilderFactory.setValidating(true);
        /**
         * 將scheam注入即可
         */
        documentBuilderFactory.setSchema(schema);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章