HTML到XHTML-完全跳过一些标记.(C#初学者)

本文关键字:初学者 XHTML- HTML | 更新日期: 2023-09-27 17:57:52

我最近开始学习C#。MSDN有一个例子,你可以通过直接获取XML文件来制作RSS应用程序,所以我尝试了一些自己的东西,但和大多数时候一样,我没有做对把叹息声放在这里

由于页面是HTML,我尝试寻找HTML到XHTML的转换器,我发现了一个名为HTML Cleaner的转换器(非常有趣)。

它用<dd>标签替换了不需要的标签,但我希望跳过这些标签,所以我修改了自己的标签:

public override bool Read()
{
  bool status = base.Read();
  if( status )
  {
    if( base.NodeType == XmlNodeType.Element )
    {
      dowrite = false;
      // Got a node with prefix. This must be one of those "<o:p>"
      // or something else.  Skip this node entirely. We want prefix-
      // less nodes so that the resultant XML requires no namespace.
      foreach (string line in AllowedTags)
      {
        if (base.Name == line || 
           (base.Name == "html" && first == false))
        { 
            dowrite = true; 
            first = true; 
        }
      } 
      if( base.Name.IndexOf(':') > 0 )
        dowrite=false;
      if(!dowrite)
        base.Skip();
    }
  }
    return status;
}

问题是它只打印一个<dd>标签,而不打印其他标签。即使存在允许的标记,它也会跳过它们。

为什么会发生这种情况?任何帮助都将不胜感激。如果您有其他方法,请随时提出建议。


编辑:无论如何要做到这一点???

HTML到XHTML-完全跳过一些标记.(C#初学者)

看起来Read方法返回的是XML节点,而不是标记,因此任何不匹配节点的全部内容都将被删除。

如果输入是一个典型的HTML文件,那么在递归Read方法的某个时刻,将找到"head"元素。这不在AllowedTags列表中,因此它及其所有派生节点都将是Skip ped。

这同样适用于body元素。它及其所有子代都将被跳过。

这就留下了html元素,它在代码中匹配,因此被插入到XMLDOM中。

由于html不在AllowedTags列表中,因此在HTMLWriter阶段,html标记将转换为dd标记,这就是您所描述的输出。

实际上,我并没有对html2xhtmlclean代码进行捆绑,但我认为您需要调整编写器代码而不是读取器代码,以实现您想要做的事情。