XML中CDATA及其字符實體的使用


在寫xml文檔時,偶爾會用到一些特殊字符,如<、>、&等,如下面這段程序:
<?xml version="1.0"?>
<y>if x<z</y>
在標簽<y></y>中不能出現“<”字符。否則會報錯,
 
有兩種方式可以解決此問題
一是用CDATA
先看一下CDATA的用法,如下所示就可以解決上面出現的問題。
<y><![CDATA[if x<z]]></y>
 <FirstMenu>
    <MenuName> <![CDATA[<掃描設置> ]]></MenuName>
    <MenuImage>crawl.gif</MenuImage>
    <MenuFocusImage>crawlf.gif</MenuFocusImage>
    <Href>../../dbconfig/dbresource_list.action</Href>
    <Target>mainFrame</Target>
    <UrlFlag>01</UrlFlag>
  </FirstMenu>
 
但是如果程序像下面這樣,
<y> <![CDATA[if x<z ]]>]]></y>
會報錯,切記在一個CDATA中不能出現"]]>"字符串。
如果必須輸入 "]]>"字符串的話可以按下面這樣解決,將此字符串分為兩部分。
<y> <![CDATA[if x<z ]]]]> <![CDATA[>]]> </y>
 
二是用字符實體
當然也可以用字符實體來替代符號解決前面的問題
比如:
<y>if x &lt; z/y>
用字符實體&it;來替代"<"符號。
在編寫xml文檔時, 標簽的屬性中如果出現了字符問題,不能使用CDATA解決,只能用字符實體替代符號
如:
<x name='a"'c'></x><!--這段代碼會出現問題-->
可以將上面標簽中的符號用字符實體替代。
如下:<x name="a&quot;&apos;c"></x>
 
 
/**
     * 
     * @Title: filterXmlChar
    
     * @Description: TODO(解決 '<' 和 '&' 特殊字符的問題)
    
     * @param str
     * @return String
     */
    private static String filterXmlChar(String str) {
        String retstr = "";
        if (notEmpty(str)) {
            retstr = str.replaceAll("<", "&lt;")
                        .replaceAll(">", "&gt;")
                        .replaceAll("&", "&amp;")
                        .replaceAll("'", "&apos;")
                        .replaceAll("\"", "&quot;");
        }
        return retstr;
    }    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM