<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0

    前兩天去一家公司面試,里面有一道XML的題目,題目沒什么難的,但由于編碼問題引發(fā)了一些問 題,我回來后嘗試探索了一下
    題目要求:把下面的XML文件用XSL轉(zhuǎn)換成html表格顯示出來,并按pubDate降序排列


     1 <? xml version="1.0" ?>
     2 <? xml-stylesheet type="text/xsl" href="books.xsl" ?>
     3 < books >
     4    < book  id ="1"  pubDate ="20050707" >
     5       < title > c# XML入門經(jīng)典 </ title >
     6       < description > 編程人員必被的XML技能 </ description >
     7    </ book >
     8    < book  id ="2"  pubDate ="20050607" >
     9       < title > XSL編程精要 </ title >
    10       < description > 從XML到HTML </ description >
    11    </ book >
    12    < book  id ="3"  pubDate ="20050607" >
    13       < title > .NET framework框架程序設(shè)計(jì) </ title >
    14       < description > 框架程序設(shè)計(jì) </ description >
    15    </ book >
    16 </ books >

    當(dāng)時(shí)我習(xí)慣的在桌面上建立文本文件,然后手工輸入:


     1 <? xml version="1.0" ?>
     2 < xsl:stylesheet  version ="1.0"  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" >
     3    < xsl:template  match ="/" >
     4       < html >
     5          < body >
     6             < table  border ="1pt" >
     7                < tr >
     8                    < td > BookId </ td >
     9                    < td > Title </ td >
    10                    < td > Description </ td >
    11                    < td > PubDate </ td >
    12                </ tr >
    13                < xsl:apply-templates  select ="http://book" >
    14                    < xsl:sort  select ="@pubDate"  order ="descending"   />
    15                </ xsl:apply-templates >
    16             </ table >
    17          </ body >
    18       </ html >
    19    </ xsl:template >
    20    < xsl:template  match ="book" >
    21                < tr >
    22                    < td >< xsl:value-of  select ="@id"   /></ td >
    23                    < td >< xsl:value-of  select ="title/text()"   /></ td >
    24                    < td >< xsl:value-of  select ="description/text()"   /></ td >
    25                    < td >< xsl:value-of  select ="@pubDate"   /></ td >
    26                </ tr >
    27    </ xsl:template >
    28 </ xsl:stylesheet >

    注意:上面的XML代碼由于FTB插入XML代碼功能有問題,<后和>前都不能有空格,這也是XML Well-Format的要求.

    然后在IE里瀏覽XML文件,提示:文本內(nèi)容中發(fā)現(xiàn)無效字符;我檢查過文件,文件沒有非法字符,所以我覺得可能是XML編碼問題,然后在頂部的指令里加入encoding="UTF-8",按理來說,UTF-8完全適合題涉及到字符集,但還是提示:文本內(nèi)容中發(fā)現(xiàn)無效字符,而改成encoding="GB2312"就正常了,什么原因呢?

    我回來嘗試了一下,一般有兩種情況:
    情況1:
    默認(rèn)情況下,windows的notepad把文件保存為ANSI格式,在這種情況,設(shè)定不同encoding有不同的
    結(jié)果:
      encoding="windows-1252",不出錯(cuò),但中文顯示為亂碼;
      encoding="GB2312" ,正常顯示;
      encoding="UTF-8" ,出錯(cuò),提示文本內(nèi)容中發(fā)現(xiàn)無效字符 ;
    情況2
    把xml文件在notepad另包存為UTF-8格式,
      encoding="windows-1252",出錯(cuò),提示不支持從當(dāng)前編碼到指定編碼的切換;
      encoding="GB2312" ,出錯(cuò),提示不支持從當(dāng)前編碼到指定編碼的切換;
      encoding="UTF-8" ,正常;
    例外:不設(shè)置encoding的值,默認(rèn)就是UTF-8,所以把這種情況歸入U(xiǎn)TF-8的情況.

    那么如何來理解上面的兩種情況呢?
     W3C定義了三條XML解析器如何正確讀取XML文件的編碼的規(guī)則:
     1,如果文擋有BOM(字節(jié)順序標(biāo)記,一般來說,如果保存為unicode格式,則包含BOM,ANSI則無)
    ,就定義了文件編碼
     2,如果沒有BOM,就查看XML聲明的編碼屬性
     3,如果上述兩個(gè)都沒有,就假定XML文擋采用UTF-8編碼

    現(xiàn)在,讓我們嘗試用上面的三條規(guī)則來解釋上面出現(xiàn)的情況:
    情況1分析:
    由于XML默認(rèn)被保存ANSI格式,如果設(shè)置encoding="UTF-8",那么XML解析器就把文件以UTF-8格式
    來解析,由于文件的實(shí)質(zhì)格式是ANSI,而ANSI和UTF-8除了其中128個(gè)字符的編碼相同外,其他的 都不相同而被解析器認(rèn)為無效字符,所以出現(xiàn)"文本內(nèi)容中發(fā)現(xiàn)無效字符"的錯(cuò)誤了;設(shè)置為 encoding="windows-1252",解析器以windows-1252來解析,ANSI其實(shí)就是windows-1252,所以編 碼相同,解析器能順利解析,但中文出現(xiàn)亂碼又如何理解呢?windows-1252是單字節(jié)字符集,而 中文是需要雙字節(jié)編碼的,所以只能解析為亂碼。設(shè)置encoding="GB2312"能夠正常顯示,那又如 何理解呢?因?yàn)镚B2312是雙字節(jié)的中文簡體字符集?前面不是說文件的實(shí)質(zhì)格式是單字節(jié)的ANSI 嗎?這就是矛盾的地方。

    情況2分析:
    由于文件被保存為UTF-8(Unicode的其中一種編碼方式),所以文件包含BOM,按照W3G的規(guī)則來解釋
    ,XML解析器將以UTF-8解析XML而忽略encoding的設(shè)置。可實(shí)際上是不能忽略encoding的設(shè)置的, 否則無法解釋情況2出現(xiàn)的現(xiàn)象。

    遺留問題:
    本文并沒能完全分析情況1,2的現(xiàn)象。不知道大家是如何理解這些情況的呢?

    posted on 2009-03-05 12:30 何克勤 閱讀(346) 評(píng)論(0)  編輯  收藏 所屬分類: XML相關(guān)

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 91亚洲va在线天线va天堂va国产| 一本一道dvd在线观看免费视频| 亚洲线精品一区二区三区影音先锋| 日韩在线播放全免费| 国产99久久久国产精免费| 香蕉大伊亚洲人在线观看| 亚洲视频在线观看| 亚洲人精品午夜射精日韩| 亚洲AV网站在线观看| 国产卡二卡三卡四卡免费网址| 久久久久免费精品国产| jizz日本免费| 日韩精品免费一线在线观看| 亚洲欧美日韩综合久久久| 久久久久se色偷偷亚洲精品av| 亚洲国产综合精品中文第一区| 亚洲一区二区三区影院| 无码不卡亚洲成?人片| 国产精品色午夜视频免费看| 成人在线免费观看| 成人性生交视频免费观看| 毛片免费视频观看| 免费中文熟妇在线影片 | 国产精品免费电影| 免费国产黄线在线观看| 久久久久久久免费视频| 亚洲视频免费播放| 国产精品极品美女免费观看| 日本亚洲免费无线码| 1000部无遮挡拍拍拍免费视频观看| 老司机69精品成免费视频| 一个人免费视频观看在线www| 国产无限免费观看黄网站| 国产精品内射视频免费| 99麻豆久久久国产精品免费| 免费无码又爽又刺激网站| 久久免费视频网站| 91在线老王精品免费播放| 亚欧人成精品免费观看| 免费无码又黄又爽又刺激| 精品久久久久久久免费人妻|