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>
标签,而不打印其他标签。即使存在允许的标记,它也会跳过它们。
为什么会发生这种情况?任何帮助都将不胜感激。如果您有其他方法,请随时提出建议。
编辑:无论如何要做到这一点???
看起来Read
方法返回的是XML节点,而不是标记,因此任何不匹配节点的全部内容都将被删除。
如果输入是一个典型的HTML文件,那么在递归Read
方法的某个时刻,将找到"head"元素。这不在AllowedTags列表中,因此它及其所有派生节点都将是Skip
ped。
这同样适用于body
元素。它及其所有子代都将被跳过。
这就留下了html
元素,它在代码中匹配,因此被插入到XMLDOM中。
由于html
不在AllowedTags列表中,因此在HTMLWriter
阶段,html标记将转换为dd
标记,这就是您所描述的输出。
实际上,我并没有对html2xhtmlclean代码进行捆绑,但我认为您需要调整编写器代码而不是读取器代码,以实现您想要做的事情。