【发布时间】:2011-09-06 13:25:22
【问题描述】:
使用 perl 的 XML::SAX 模块我正在解析 (x)html 模板,结果只是将大量输入回显到输出。我有一个 SAX 事件处理程序,它扩展了 XML::SAX::Base 并实现了常用方法 - start_element、end_element 等等。
现在我的问题涉及不带结束标记的元素 - 例如<img />、<link /> 和 <input />。解析器将为这些标签调用start_element($element_name, %attribute_hash) 和end_element,但是我怎么知道元素是自包含的?
换句话说,我想写出<img src="blah" />,而不是<img ...></img>
我认为是无效的。
没有维护这些元素的列表,我该怎么办?在 SAX 中有没有办法直接回显一个元素,而不是从传递给事件处理程序的内容中重建它?
【问题讨论】:
-
<img></img>不是无效的(尽管<img>...</img>是无效的),它只是不兼容 HTML。 -
@Quentin,是的,我打错了图像示例,现在更正了。但是即使添加一个结束标签对于图像来说是可以的,我相信对于其他元素来说就不行了吗?
-
在 XML(以及 XHTML)中,
<foo />和<foo></foo>的含义完全相同,因此两者都是有效的。导致问题的是HTML compatibility,您不应该期望通用 XML 工具能够处理它,您需要对兼容性规则进行特殊处理。
标签: html perl parsing language-agnostic sax