将HTML格式化为合法的XML

时间:2010-02-25 17:24:02  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:XML都做不到。这时候我们就需要将外部的HTML格式化为合法的XML,以方便我们的处理。      Answer   要将HTML转换为XML,最简单的做法就是利用SgmlReader了。你需要做的仅仅是去GotDotNet下载SgmlReader,然后复制我这段代码:使用SgmlReader将HTML转换为合法的XML,就那么简单。      接着解释一下那段...
  正文:网站中需要引入来自外部的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)。
  
  网上冲浪更快更爽,下载带有 Google 工具栏的 firefox
  Add to del.icio.usDigg This!Share on FacebookGoogle Bookmark This
  Feedback
  # re: 十分钟内学会:将HTML格式化为合法的XML 回复 更多评论
  2007-02-07 14:12 by Wisdom-zh
  不错, 有用哦
  # re: 十分钟内学会:将HTML格式化为合法的XML[未登录] 回复 更多评论
  2007-04-15 02:14 by deerchao
  SGML Reader的效果没有Html Tidy好,不过前者是.Net下的,用着方便。Html Tidy没有.Net版本,不过可以通过.Net对包装C代码的COM的包装来调用。
  # re: 十分钟内学会:将HTML格式化为合法的XML 回复 更多评论
  2007-04-15 12:51 by Cat Chen
  @deerchao
  我没有用过Html Tidy,用起来有什么不同?
  # re: 十分钟内学会:将HTML格式化为合法的XML[未登录] 回复 更多评论
  2007-04-23 02:56 by deerchao
  HTML Tidy的兼容性更好。有些SGML Reader解析不了的它也能行。
  http://tidy.sourceforge.net
  # re: 十分钟内学会:将HTML格式化为合法的XML[未登录] 回复 更多评论
  2007-06-10 10:20 by 刘军
  public static string Convert(string html)
  {
  if (string.IsNullOrEmpty(html.Trim()))
  {
  return string.Empty;
  }
  using (SgmlReader reader = new SgmlReader())
  {
  reader.DocType = "HTML";
  reader.InputStream = new StringReader(html);
  using (StringWriter stringWriter = new StringWriter())
  {
  using (XmlTextWriter writer = new XmlTextWriter(stringWriter))
  {
  reader.WhitespaceHandling = WhitespaceHandling.None;
  writer.Formatting = Formatting.Indented;
  XmlDocument doc = new XmlDocument();
  doc.Load(reader);
  if (doc.DocumentElement == null)
  {
  return string.Empty;
  }
  else
  {
  doc.DocumentElement.WriteContentTo(writer);
  }
  writer.Close();
  string xhtml = stringWriter.ToString();
  return xhtml;
  }
  }
  } "将HTML格式化为合法的XML"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12912.html


关键字:

关于《将HTML格式化为合法的XML》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td