代码改变世界

十分钟内学会:将HTML格式化为合法的XML

2007-02-07 12:14  Cat Chen  阅读(9129)  评论(8编辑  收藏

Question

在网站中需要引入来自外部的HTML,这是很正常的事情。例如允许用户采用HTML直接发表时,或者聚合外部的Feed时,这时候外部的HTML就直接嵌入到我们的代码中。如果我们的网站是设计为符合XHTML的,那就可能因为引入外部HTML而破坏掉XHTML的合法性,甚至连合法的XML都做不到。这时候我们就需要将外部的HTML格式化为合法的XML,以方便我们的处理。

Answer

要将HTML转换为XML,最简单的做法就是利用SgmlReader了。你需要做的仅仅是去GotDotNet下载SgmlReader,然后复制我这段代码:使用SgmlReader将HTML转换为合法的XML,就那么简单。

接着解释一下那段代码,它用到的SgmlReader,一个继承自XmlReader的类,并且在资源中内置了一个HTML.DTD。创建一个SgmlReader的实例,并且指定它使用的DocType是"HTML",那么它就知道这是指它内置的HTML.DTD。当然如果你不喜欢用这个DTD,你可以指定外部的其它DTD给它。接下来所做的事情,就是将它的读取放入一个XmlDocument中,然后再利用一个XmlTextWriter将XmlDocument写出来。如果你需要的结果是一个XmlDocument,那么最后一步就可以省略了。

需要说明的是,SgmlReader所使用的HTML.DTD比我们通常用的loose.dtd还要宽松,所以它仅仅能保持在尽可能兼容输入HTML的情况下,输出合法的XML。如果你需要输出符合XHTML,就需要使用更加严格的DTD,或者对输出的合法XML再作处理。

最后,如果你觉得本系列的文章对你有价值,可以考虑订阅Cat in dotNET,可选的方式包括通过Feed订阅(http://feeds.feedburner.com/CatChen/dotNET)和通过Email订阅(http://www.feedburner.com/fb/a/emailverifySubmit?feedId=573799)。