代码改变世界

SgmlReader使用小记

2011-01-21 22:29  贼寇在何方  阅读(1194)  评论(2编辑  收藏  举报

在做一个定期检测Html页面中固定链接的小工具,需要把Html转换成规范的XML,然后用XPath进行访问

这里就需要用到SgmlReader这个类库

 

SgmlReader可以用来解析HTML/SGML,并能把不规范的Html转换成规范的XHtml
string SgmlTranslate(string input)
{
   var reader = new SgmlReader();
   reader.DocType = "HTML";
   reader.WhitespaceHandling = WhitespaceHandling.None;
   reader.CaseFolding = Sgml.CaseFolding.ToLower;
   reader.InputStream = new StringReader(input);
 
   var output = new StringWriter();
   var writer = new XmlTextWriter(output);
   writer.Formatting = Formatting.Indented;
   while (reader.Read())
   {
        if (reader.NodeType != XmlNodeType.Whitespace
           && reader.NodeType != XmlNodeType.Comment)
           writer.WriteNode(reader, true);
   }
    writer.Close();
   return output.ToString();
}

仿照官方给出的示例代码写的,

另外,更改了这一句,可使得生成的XML有缩进

reader.WhitespaceHandling = WhitespaceHandling.None


最后,记得一定要把Comment类型的NodeType排除了···
昨儿险些被一个注释害死