Xml View

lua-users home
wiki

xmlview:便利存取 XML 樹

(這是 LazyKit 的一部分.)

這套套件是 XmlTree 的工作進度。快速摘要

xstring(node)

傳回節點的直接字串內容 (可為樹狀或純字串)。如果節點為混合內容的樹狀,則傳回 nil, 錯誤訊息

xtext(node)

遞迴傳回節點的字串內容,包含階層內所有子元素。

View 物件

檢視提供對 XmlTree 子項目的容易隨機存取。目前為唯讀。

目前的實作會在第一次存取時完全填充檢視,但可實作延遲實作。

xmlview.string(tree)

tree 中建立字串檢視。檢視包含 tree 中所有元素名稱獨一無二,且不包含混合內容的直接子節點。存取名稱非獨一無二或有混合內容會導致錯誤。範例

<logentry>
  <type>INFO</info>
  <time>12:50</time>
  <receivedfrom>upstream1</receivedfrom>
  <receivedfrom>upstream2</receivedfrom>
  <body>This is a <b>test message</b></body>
  <empty/>
</logentry>

tree=lxptree.parsestring(s)
sv = xmlview.string(tree)
print(sv.type)          -- "INFO"
print(sv.time)          -- "12:50"
print(sv.empty)         -- ""
print(sv.receivedfrom)  -- error "contains duplicate content"
print(sv.body)          -- error "contains mixed content" 

xmlview.text(tree)

tree 中建立文字檢視。檢視包含 tree 中所有元素名稱獨一無二的直接子節點。對這些子節點呼叫 xtext,會提供這些節點遞迴的字元資料內容。存取名稱非獨一無二會導致錯誤。

xmlview.elements(tree)

tree 中建立元素檢視。檢視包含名稱符合條件的所有子元素樹狀清單。範例

ev = xmlview.elements(tree)
ev.type => {{name="type", "INFO", n=1}, n=1}
ev.receivedfrom => {
  {name="receivedfrom", "upstream1", n=1}, 
  {name="receivedfrom", "upstream2", n=1},
  n=2
} 

缺少項目

element 會提供命名元素(若為獨一無二)。

firststringfirsttextfirstelement 會是不用迭代整個樹狀結構的檢視,因為它們不必保證獨一無二。這對延遲樹狀結構更友善。


RecentChanges · 喜好設定
編輯 · 歷程
上次編輯時間為 2004 年 2 月 29 日 上午 12:32 GMT (差異)