Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1139564
  • 博文数量: 53
  • 博客积分: 10025
  • 博客等级: 上将
  • 技术积分: 1640
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-15 17:05
文章分类

全部博文(53)

文章存档

2011年(1)

2010年(3)

2009年(25)

2008年(24)

我的朋友

分类:

2009-04-15 19:56:16

從根本上講,xml是一種描述型的標記語言。談到標記語言,就不能不說 sgml(標准通用標記語言)。sgml的功能十分強大,同時也非常複雜,從二十世紀八十年代開始就已經廣泛應用于出版等專業領域。html就是對 sgml進行了大量簡化後的一個應用,而xml也是sgml的一個應用子集,只不過鑒于html的教訓,xml在減少複雜性的同時,保留了sgml最有活 力的部分——可擴展能力。
一篇xml文檔由標記和內容組成,看起來和html文檔很相似。元素是xml最主 要的標記,與html本質的不同是xml中元素沒有預定義,而是由用戶對自己文檔中使用的元素進行定義,這就需要加入“文檔類型聲明”(dtd)。通過 dtd,一方面用戶可以在文檔中定義自己的標記,另一方面分析器也可以得到關于文檔內容和結構方面的元信息。這樣,xml文檔就具有了可擴展性、結構性和 可驗證性,同時,xml文檔也具備了存儲結構化數據的能力。考慮到與html的兼容,dtd不是xml文檔必須的成份,具有dtd的xml文檔稱作 “valid”文檔,否則是“well-formed”文檔。
 xml文檔可以表示結構化數據,可作爲文本數據庫存儲數據,也可作爲行業中數據交換的標准表示。這些都需要對xml文件的數據進行描述,如數據類型、長度 等,dtd就是完成這部分工作的。然而,由于dtd采用的是與xml文檔完全不同的語法,也就是說,需要同時有兩套分析器來處理dtd和xml文檔本身。 另外,dtd的語法也相對複雜和古怪,不大易用,所以,又産生了xml schema。
其實,xml schema本身就是一個xml文件。但不同的是,schema文件所描述的是引用它的xml文件中的元素和屬性的具體類型。除了上面提到的以外,schema比dtd還有以下優點:
 xml schema利用namespace將文檔中特殊的結點與schema說明相聯系,一個xml文件可以有多個對應的schema,而一個xml文件只能有一個對應的dtd。
xml schema內容模型是開放的,可以隨意擴充,而dtd無法解析擴充的內容。
dtd只能把內容類型定義爲一個字符串,而xml schema允許把內容類型定義爲整型、浮點型、布爾型或者許多其它的簡單數據類型。

解析 XML 有兩種:DOM和SAX
DOM 模型需要對整個XML文檔進行掃描,然後解析生成一個對象樹,XML 文檔中的所有標簽和屬性都是用對象來表示,而不是一個孤立的文本。
SAX 是事件驅動的。就是說,它可以在處理的過程中生成不同的消息,並調用相應的函數進行處理。
關于 XML 標 參見 。
爲了方便xml 文檔的編寫,校驗等,可以使用 xml 文檔編輯器,例如 xmlspy,xmlwrite等。

運行 XMLin需要包 XML::Simple,請自行安裝,比如perl -MCPAN -e shell安裝,比如rpm、dpkg、apt-get、yum等等~

比如一個xml文件內容如下:

<app name="xmlsimple" author="dorainm" mail="dorainm@gmail.com">
    <log version="0.1" date="2009-04-14">
        <change>describes about version 0.1</change>
    </log>
    <log version="0.2" date="2009-04-15">
        <change>describes about version 0.2</change>
    </log>
</app>


解析的源碼這麽寫,注意一個指針出來,其N維哈希、數組是怎麽表達的:

#!/usr/bin/perl


use XML::Simple;
use strict;

my $conf = XMLin($ARGV[0]);

print "Program $conf->{'name'} by $conf->{'author'}, $conf->{'mail'}\n";

my $i = 0;
while( $conf->{'log'}->[$i] )
{
    print "\@ $conf->{'log'}->[$i]->{'version'} at " .
     "$conf->{'log'}->[$i]->{'date'} : " .
     "$conf->{'log'}->[$i]->{'change'}\n";
    $i ++;
}
    


如果 XMLin沒有輸入值,它會自動去搜索跟程序相同名字的 .xml文件的,比如我們以空參數運行:


$ ./xmlsimple.pl
Program xmlsimple by dorainm, dorainm@gmail.com
@ 0.1 at 2009-04-14 : describes about version 0.1
@ 0.2 at 2009-04-15 : describes about version 0.2
$


就是這些,如果感興趣更多,比如 XMLout怎麽輸出XML的,自己放狗出去搜索吧~~
阅读(6290) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

crook2009-05-07 20:38:17

这几天刚用过XML::Simple, 挺好用的