将HTML格式化为文本

时间:2011-03-30 11:24:31

标签: .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>" & Environment.NewLine)

Return "<pre>" & Server.HtmlEncode(objStringBuilder.ToString) & "</pre>"

更新1:

我尝试了以下操作,但它不起作用:

return "<pre>" & Server.HtmlEncode("<div><div>some text</div></div>") & "</pre>"

我希望它显示类似这样的内容

<div>
    <div>some text</div>
</div>

但是它正在这样,这是预期的:

<div><div>some text</div></div>

我不知道如何获取空格,制表符,回车到该字符串中可以被pre标签识别,因为environment.newline和/或vbtab没有区别。

原始问题:

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

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

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

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

Html Agility Pack对于解析HTML文档非常有用,XElement类提供了格式化XML文档的能力。那么为什么不将它们用于HTML格式呢?抱歉,我不熟悉VB,所以我在C#中的示例:

首先,创建一个新文档:

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.LoadHtml("<div><div>some text</div></div>");

XElement.Parse方法不喜欢当时的情况,例如只是文本没有包含在标签中,因此我在这种情况下添加了一个根div标记:

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);
    }
}

然后我将文档保存为字符串:

string html = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    html = writer.ToString();
}

最后,创建一个新元素并将其转换为字符串(带格式):

XElement element = XElement.Parse(html);
html = element.ToString();

html现在包含一个值<div>\r\n <div>some text</div>\r\n</div>,如果您对其进行html编码,则将其包含在例如<pre>标记将获得所需的输出:

<div>
  <div>some text</div>
</div>

注意:我没有仔细测试,我只想表明可以这样做。

答案 2 :(得分:1)

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

Dim S = <div>
            <div>some text</div>
        </div>

当你打电话给ToString时,可以选择保留格式:

S.ToString(SaveOptions.None)

输出:

<div>
  <div>some text</div>
</div>

答案 3 :(得分:0)

尝试将已编码的HTML片段放在prett标记内。