Xml 视图

lua-users home
wiki

xmlview: 方便访问 XML 树

(这是 LazyKit 的一部分。)

此包正在为 XmlTree 开发中。快速概览

xstring(node)

返回节点的直接字符串内容(节点可以是树,也可以是简单的字符串)。如果节点是包含混合内容的树,则返回 nil,errormessage

xtext(node)

递归地返回节点的字符串内容,遍历所有子元素。

视图对象

视图提供对 XmlTree 子节点的简单随机访问。它们目前是只读的。

当前实现会在首次访问时完全填充它们,但也可以实现延迟加载。

xmlview.string(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)

在树上创建一个文本视图。该视图包含树的所有直接子节点,这些子节点具有唯一的元素名称。对这些子节点调用 xtext,提供这些节点的递归字符数据内容。访问非唯一名称会导致错误。

xmlview.elements(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 将是无需遍历整个树的视图,因为它们不需要保证唯一性。这可能对延迟加载树更友好。


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2004 年 2 月 29 日凌晨 12:32 GMT (差异)