c# - 用另一个元素包装一个 HTML 元素?

标签 c# html

我正在编写一个程序来解析一些 HTML。具体来说,我正在寻找列表中带下划线的元素,并将这些带下划线的元素转换为超链接。

这是预转换 HTML 的示例:

<ul>
  <li>
    <u>Mode selector </u>
  </li>
  <li>
    <u>LAND ALT</u>
  </li>
  <li>
    <u>FLT ALT</u>
  </li>
</ul>

这是我想要的结果:

<ul>
  <li>
    <a id="triv14522" onclick="TxtLinkAction(15627,15673)">
      <span style="color: rgb(102, 204, 255); font-size: 11pt;">
        <u>Mode selector</u>
      </span>
    </a>
  </l1>
  <li>
    <a id="triv14523" onclick="TxtLinkAction(15627,15674)">
      <span style="color: rgb(102, 204, 255); font-size: 11pt;">
        <u>LAND ALT</u>
      </span>
    </a>
  </li>
    <a id="triv14887" onclick="TxtLinkAction(15627,15679)">
      <span style="color: rgb(102, 204, 255); font-size: 11pt;">
        <u>FLT ALT</u>
      </span>
    </a>
  </li>
</ul>

在我的程序中,我已经为每个带下划线的元素构建了 anchor 和跨度元素。仅供引用,以下是我的操作方式:

TrivId = trivId;
ActionItemId = actionItemId;
TextLayerId = textLayerId;
var trivIdText = "id=\"triv" + TrivId + "\"";
var onClickText = "onclick=\"TxtLinkAction(" + TextLayerId + "," + ActionItemId + ")\"";
var anchor = "<a " + trivIdText + " " + onClickText + ">";
var span = "<span style=\"color: rgb(102, 204, 255); font-size: 11pt;\">";  

所以,我的主要问题是我不知道如何用 anchor 和跨度元素“包装”列表中每个带下划线的元素。如果这是 XML,我可以使用 AddBeforeSelf 添加我的 XML 元素.我可以用 HTML 做类似的事情吗?

注意:我注意到 C# 标记已被删除,并添加了 Javascript 标记。我应该澄清一下:这是一个正在解析 PowerPoint 文档的 C# 程序。引入的值之一是 HTML 格式。我根本没有使用 Javascript,因为这不是一个实际的网页。我只是从 PowerPoint 幻灯片中获取这个特定值,它恰好是 HTML 格式。

为了进一步说明,这是我正在使用的 C# 方法。生成的修改后的 HTML 将被写入 XML 文件。生成的 HTML 将存储在 XML 标记中,<RTF> ,将有效的 HTML 作为该标记的值。

public Hyperlink(int textLayerId, int runGroupId)
        {
            TrivId = LectoraTitle.GetId();
            ActionItemId = LectoraTitle.GetId();
            TextLayerId = textLayerId;
            var trivIdText = "id=\"triv" + TrivId + "\"";
            var onClickText = "onclick=\"TxtLinkAction(" + TextLayerId + "," + ActionItemId + ")\"";
            var styleText = "style=\"" + Settings.Default.Style + "\"";

            // build anchor/span and determine where to insert into text.text
            var anchor = "<a " + trivIdText + " " + onClickText + " " + styleText + ">";
            var span = "<span style=\"color: rgb(102, 204, 255); font-size: 11pt;\">";  
            ActionItem = new ActionItem { ActionType = ActionType.rungroup, TargetId = runGroupId };
        }

进一步的解释:我假设我可以使用 foreach 循环遍历我的 HTML 元素,使用类似下面的代码:

    // note: this is pseudocode
    var nodes = htmlSnippet;

    foreach (var node in nodes)
    {
            // if node is underline element
            // surround node with generated anchor
            // and span elements.
    }

我只是不太确定如何让我的 HTML 片段进入可枚举状态,以便我可以对其进行迭代,然后用我生成的元素包装特定元素。

新编辑: 因此,在查看 HtmlAgilityPack 之后,我将其合并到我的程序中并像这样迭代 Html(变量文本包含 HTML 值(参见上面的第一个示例)):

htmlDocument.LoadHtml(text);
var nodes = htmlDocument.DocumentNode.SelectNodes("//u");
foreach (var node in nodes)
{
   // insert code here to wrap the 
   // underline element with the generated
   // anchor/span elements
}

因此,现在我能够解析 HTML 并仅获取下划线元素。我现在需要弄清楚如何用我生成的 anchor /跨度元素包围这些下划线元素。我希望我能做类似 node.AddParent(anchor) 的事情.

最佳答案

为了迭代 HTML,您可能需要使用 HTML Agility Pack

http://htmlagilitypack.codeplex.com/

这里的例子:

http://htmlagilitypack.codeplex.com/wikipage?title=Examples

这里有一个不错的操作方法:

http://www.codeproject.com/Articles/659019/Scraping-HTML-DOM-elements-using-HtmlAgilityPack-H

您可以使用 NuGet 安装它。

关于c# - 用另一个元素包装一个 HTML 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22634968/

相关文章:

html - 如何将第二个下拉菜单添加到第一个?

c# - LINQ Max() 函数执行速度超慢

c# - 使用 C++ 2008 Redistributables 的 VS2010 安装项目?

c# - NHibernate - 如何审计实体的所有领域?

javascript - onclick 切换类不起作用

html - 如何动态改变顶部菜单的背景颜色?

c# - 如何从服务器找出客户端的下载速度?

c# - .NET Framework 4.6.2 类库中的目标 .NET Core 类库

javascript - HTML结束后的空白

javascript - Twitter Bootstrap Javascript - 如何仅使用工具提示库?