.net 将HTML格式化为文本

.net 将HTML格式化为文本,.net,asp.net,vb.net,.net-3.5,.net,Asp.net,Vb.net,.net 3.5,更新2: 在本节中,我尝试手动添加制表符和行空间,以便在通过pre标记显示时格式化字符串。但这是行不通的 objStringBuilder.Append("<div>" & Environment.NewLine) objStringBuilder.Append(vbTab & "<div>some text</div>" & Environment.NewLine) objStringBuilder.Append("</div&

更新2:

在本节中,我尝试手动添加制表符和行空间,以便在通过pre标记显示时格式化字符串。但这是行不通的

objStringBuilder.Append("<div>" & Environment.NewLine)
objStringBuilder.Append(vbTab & "<div>some text</div>" & Environment.NewLine)
objStringBuilder.Append("</div>" & Environment.NewLine)

Return "<pre>" & Server.HtmlEncode(objStringBuilder.ToString) & "</pre>"
objStringBuilder.Append(“&Environment.NewLine”)
objStringBuilder.Append(vbTab&“一些文本”和Environment.NewLine)
objStringBuilder.Append(“&Environment.NewLine”)
返回“&Server.HtmlEncode(objStringBuilder.ToString)&”
更新1:

我尝试了以下方法,但无效:

<div>
    <div>some text</div>
</div>
return”“&Server.HtmlEncode(“一些文本”)&”
我想让它显示这样的东西

Server.HtmlEncode("<div>Some text</div>");

一些文本
但它是这样的,这是意料之中的:

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.LoadHtml("<div><div>some text</div></div>");
一些文本
我不知道如何将空格、制表符、回车符转换成pre标记可以识别的字符串,因为environment.newline和/或vbtab没有区别

原始问题:

是否可以在页面上以格式化的方式将HTML显示为文本?例如,为了便于阅读,它应该包含空格、制表符等:

从另一个问题中,我学习了如何将HTML显示为文本,如下所示:

if (htmlDoc.DocumentNode.HasChildNodes)
{
    bool wrapperNeeded = htmlDoc.DocumentNode.ChildNodes
        .Cast<HtmlNode>()
        .Any(n => n.NodeType != HtmlNodeType.Element);

    if (wrapperNeeded)
    {
        var wrapper = htmlDoc.CreateElement("div");
        wrapper.AppendChildren(htmlDoc.DocumentNode.ChildNodes);
        htmlDoc.DocumentNode.RemoveAllChildren();
        htmlDoc.DocumentNode.AppendChild(wrapper);
    }
}
Server.HtmlEncode(“一些文本”);

尝试将编码的HTML片段放入
pre
tt
标记中。

尝试将编码的HTML片段放入
pre
tt
标记中。

其中一个可能对可读性有用


其中一个可能对可读性也很有用

是解析HTML文档非常有用的工具,类提供了格式化XML文档的能力。那么,为什么不在HTML格式中同时使用它们呢?抱歉,我不熟悉
VB
,因此我在
C#
中的示例如下:

首先,创建新文档:

string html = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    html = writer.ToString();
}
然后我将文档保存为字符串:

<div>
  <div>some text</div>
</div>
最后,创建新元素并将其转换为字符串(带格式):

html
现在包含一个值
\r\n一些文本\r\n
,如果您对其进行html编码,则将其包装成例如
标记将获得所需的输出:

S.ToString(SaveOptions.None)
<div>
  <div>some text</div>
</div>

一些文本
注意:我没有仔细测试它,我只是想证明它可以通过这种方式完成。

是解析HTML文档非常有用的工具,类提供了格式化XML文档的能力。那么,为什么不在HTML格式中同时使用它们呢?抱歉,我不熟悉
VB
,因此我在
C#
中的示例如下:

首先,创建新文档:

string html = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    html = writer.ToString();
}
然后我将文档保存为字符串:

<div>
  <div>some text</div>
</div>
最后,创建新元素并将其转换为字符串(带格式):

html
现在包含一个值
\r\n一些文本\r\n
,如果您对其进行html编码,则将其包装成例如
标记将获得所需的输出:

S.ToString(SaveOptions.None)
<div>
  <div>some text</div>
</div>

一些文本

注意:我没有仔细测试它,我只是想证明它可以通过这种方式完成。

VB.Net有一个很酷的东西,叫做XML文本,它允许您编写XML而不需要字符串语法。只要遵循XML语法(非常接近所有标记),就可以使用它来编写HTML块:

这将产生:


一些文本

VB.Net有一个很酷的东西,叫做XML文本,它让您无需使用字符串语法即可编写XML。只要遵循XML语法(非常接近所有标记),就可以使用它来编写HTML块:

这将产生:


一些文本

很抱歉这么说,但你真的很有趣。您没有向HtmlEncode提供任何空格或制表符。那么你为什么认为,它们会在以后存在呢?它们不是凭空出现的。。。显然,你真正想做的是首先美化HTML,然后对它进行编码。确切地说,我不知道如何在字符串中添加空格、回车、制表符等。我试过environment.newline和vbtab,但它们没有什么区别。奇怪。我现在不能测试它,所以我不能提供更多的提示,对不起。很抱歉这么说,但你真的很有趣。您没有向HtmlEncode提供任何空格或制表符。那么你为什么认为,它们会在以后存在呢?它们不是凭空出现的。。。显然,你真正想做的是首先美化HTML,然后对它进行编码。确切地说,我不知道如何在字符串中添加空格、回车、制表符等。我试过environment.newline和vbtab,但它们没有什么区别。奇怪。我现在不能测试它,所以我不能提供更多提示,对不起。为什么你有双引号,后面还有一组单引号?不确定,我想当我在stackoverflow点击这里的“代码”按钮时,这些是自动插入的。为什么你也有双引号,后面有一组单引号?不确定,我想当我点击stackoverflow这里的代码按钮时,这些代码会自动插入。如果不下载插件,这是不可能的,我只想在html中添加一些空格和回车。在内容周围添加标记将保留现有的换行符。因此,如果您想要换行符,那么可以将它们添加到源代码中,只要您愿意,但是没有神奇的.net framework方法可以按照您自己特别喜欢的样式格式化HTML。你需要在谷歌上搜索一个可以使用的代码美化器库。我明白,我不明白的是为什么像environment.newline或vbtab这样的东西不起作用。我不知道,也许你应该发布你用来插入环境新行或标签的代码示例,也许有人有机会回答这个问题。我不明白,当你可以使用一个已经编写和测试过的免费库时,你为什么要编写自己的解析器来插入这些字符。不下载插件是不可能的,我只想在html中添加一些空格和回车。在你的