2008年12月3日

Perl的XML Parser XML::Simple (2)

來寫XML::Simple 裡面 XMLout跟一些Option的設定. 最後面附的example寫的到的話再說...
照樣附上原文 <--直接reference到XMLout
假設已經有一個data structure的hashref了, XMLout可以將它寫出成XML格式.
寫出的時候有一些事情必須注意; 1. Hash Key會被encode成element name or Attribute name.
2. 這些name必須由字母開頭. 剩下的必須為字母, 數字, -, 底線, '.', 或者分號(這個只能出現一次, 而且必須被用於namespaces). hash value部分就可以隨便用符號, 除了binary data以外.
如果違反這些規則, XMLout還是可以寫出, 只是不能再被讀取而已.
另外資料還是不要有產生迴圈的關係, 會讓他掛掉.

Options:
每一版他都會release一些新的option, 所以其實這個XML::Simple已經變得不是很簡單了:) 作者建議兩個Option一定要看一下: ForceArray, KeyAttr

挑一些簡單, 作者建議的Option來看:
AttrIndent=>1: 輸出的時候請斷行.
ForceArray=>: 設成1的時候將會將巢狀結構的第二層開始都強制存成array, 不管他是不是只有一項. 若把KeyAttr打開的時候, 將會偷偷把ForceArray設為1.
或者可以給一個hashname, 這樣遇到該hashname的時候會自動強制存成array. 2.05版開始可以用regular expression.
KeepRoot=>1: 有時候讀入或讀出會遺失root, 這個option設為1會避免這個狀況.
KeyAttr=>[list]: 還滿難講的....附上原文的例子比較清楚.
NoAttr=>1: 把所有Attribute去掉.
OutputFile=>: 可以指定output file.

Optional OO Interface; 就是專門給OO使用的.
要先有一個new出來的XML::Simple的instance.
parse_string(text)
parse_file(filename)
parse_fh(file_handle)

看完了, 其實很多option都是幫忙整理XML讀進來的format, 讓找值的時候code不會太難看....
似乎有進階用法, 之後再看看好了.

沒有留言: