【问题标题】:Formatting HTML as text将 HTML 格式化为文本
【发布时间】:2011-07-26 00:45:46
【问题描述】:

更新 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>");

【问题讨论】:

  • 为什么双引号后跟一组单引号?
  • 不确定,我认为当我在 stackoverflow 中单击此处的代码按钮时会自动插入这些内容。

标签: .net asp.net vb.net .net-3.5


【解决方案1】:

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

【讨论】:

  • 很抱歉,但你真的很有趣。您没有向 HtmlEncode 提供任何空格或制表符。那么你为什么认为,它们会在之后存在呢?它们不会凭空出现……显然,您真正想做的是首先美化该 HTML,然后再对其进行编码。
  • 没错,我不知道如何在字符串中添加空格、回车、制表符等。我尝试了 environment.newline 和 vbtab,但它们没有任何区别。
  • 奇怪。我现在无法测试它,所以我无法提供更多提示,抱歉。
【解决方案2】:

【讨论】:

  • 不下载插件是不是不行,我只是想在html中加一些空格和回车。
  • 在您的内容周围添加
     标签将保留现有的换行符。因此,如果您想要换行符,请将它们添加到您想要的任何地方的源代码中,但是没有神奇的 .net 框架方法可以以您自己特别喜欢的样式格式化 HTML。您需要对可以使用的代码美化器库进行一些谷歌搜索。
  • 我明白,但我不明白为什么 environment.newline 或 vbtab 之类的东西不起作用。
  • 我不知道,也许您应该发布用于插入环境换行符或制表符的代码示例,并且有人可能有机会回答这个问题。我不明白您为什么要编写自己的解析器来插入这些字符,而您可以使用已经编写和测试过的免费库。
【解决方案3】:

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 方法不喜欢 when then e.g.只是文本没有包含在标签中,所以我在这种情况下添加了一个根 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 现在包含一个值&lt;div&gt;\r\n &lt;div&gt;some text&lt;/div&gt;\r\n&lt;/div&gt;,如果您对它进行 html 编码,则将其包装成例如&lt;pre&gt; 标签会得到想要的输出:

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

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

【讨论】:

    【解决方案4】:

    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>
    

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2023-03-13
      • 2010-09-26
      • 1970-01-01
      相关资源
      最近更新 更多