【问题标题】:Net Core: Convert String to TagBuilderNet Core:将字符串转换为 TagBuilder
【发布时间】:2019-07-06 03:48:00
【问题描述】:

以下代码将TagBuilder 转换为String。 什么是相反的?如何将 String 反向转换为 TagBuilder? 正在寻找解决方案。

Convert IHtmlContent/TagBuilder to string in C#

public static string GetString(IHtmlContent content)
{
    using (var writer = new System.IO.StringWriter())
    {        
        content.WriteTo(writer, HtmlEncoder.Default);
        return writer.ToString();
    } 
}       

【问题讨论】:

  • TagBuilder 实现了 IHtmlContent 接口,它是否提供任何方法来获取字符串输入和 TagBuilder 输出? TagBuilder 不就是 html 元素的集合吗?
  • 不确定,正在研究
  • 如果将字符串转换为 tagbuilder 意味着获取整个 html 字符串并创建 Tagbuilder 的实例,那么您不能。但是,如果需要,您可以将标签名称作为参数传递。我相信您可能会对link 感兴趣。
  • 应该在采取步骤向 StackOverflow 提问之前进行研究...

标签: c# asp.net-core .net-core asp.net-core-mvc


【解决方案1】:

作为一个选项,您可以使用像 HtmlAgilityPack 这样的 html 解析器并获取一个 html 节点,然后使用节点的名称、属性和内部 html 创建一个 TagBuilder

public TagBuilder GetTagBuilder(string html)
{
    var node = HtmlAgilityPack.HtmlNode.CreateNode(html);
    var tagBuilder = new TagBuilder(node.Name);
    tagBuilder.MergeAttributes(node.Attributes.ToDictionary(x => x.Name, x => x.Value));
    tagBuilder.InnerHtml = node.InnerHtml;
    return tagBuilder;
}

例如:

var html = @"<div id=""div1"" class=""class1"">Something</div>";
var tagBuilder = GetTagBuilder(html);
var str = tagBuilder.ToString();

那么str 的值将是:

<div class="class1" id="div1">Something</div>

【讨论】:

    【解决方案2】:

    使用 XmlDocument

    var doc = new System.Xml.XmlDocument();
    doc.LoadXml(html);
    TagBuilder tagBuilder = new TagBuilder(doc.DocumentElement.Name);
    tagBuilder.MergeAttributes(doc.DocumentElement.Attributes.Cast<System.Xml.XmlAttribute>().ToDictionary(x => x.Name, x => x.Value));
    tagBuilder.InnerHtml = doc.DocumentElement.InnerXml;
    return tagBuilder;
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。您可以使用edit 按钮改进此答案以获得更多选票和声誉!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2010-12-15
    • 2010-11-22
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多