.net 如何使用HTML Agility Pack修复HTML

.net 如何使用HTML Agility Pack修复HTML,.net,html-agility-pack,.net,Html Agility Pack,我有数百个ASPX文件,需要重构一下。我多次出现此代码: <td style="text-align: right;"> <span class="frmFldLbl">Task (or some other text)</span> </td> 干净多了!它的功能是一样的,因为我将粘贴文本对齐:右 现在,我只担心一个文件是否能正常工作,然后我会添加目录递归和所有好东西。我正在使用来解析HTML文件,并且我能够使用XPATH来选择重构的目标范

我有数百个ASPX文件,需要重构一下。我多次出现此代码:

<td style="text-align: right;">
  <span class="frmFldLbl">Task (or some other text)</span>
</td>
干净多了!它的功能是一样的,因为我将粘贴
文本对齐:右frmFldLbl
类定义上也显示code>

现在,我只担心一个文件是否能正常工作,然后我会添加目录递归和所有好东西。我正在使用来解析HTML文件,并且我能够使用XPATH来选择重构的目标范围

我需要能够做的,但还没有弄清楚的是如何将文本插入到
的子项中的正确位置。如果我能找到TFM,我会选择RTFM,但它似乎没有很好的文档记录。下面是我想到的(它抛出了一个异常)如何在正确的位置插入文本?

    Dim doc As New HtmlDocument()
    doc.Load(fileName)
    Dim culpritNodes As HtmlNodeCollection = doc.DocumentNode.SelectNodes("//td/span[@class='frmFldLbl']")

    If culpritNodes IsNot Nothing Then
        For Each culpritNode As HtmlNode In culpritNodes

            Dim culpritNodeIndex As Int32 = culpritNode.ParentNode.ChildNodes.IndexOf(culpritNode)
            Dim culpritNodeText As String = culpritNode.InnerHtml
            Dim parentTdClassAtt As HtmlAttribute = culpritNode.ParentNode.Attributes("class")

            If Not parentTdClassAtt.Value.Contains("frmFldLbl") Then

                If Not String.IsNullOrEmpty(parentTdClassAtt.Value) Then parentTdClassAtt.Value += " "
                parentTdClassAtt.Value += "frmFldLbl"

            End If

            Dim replacementNode As New HtmlNode(HtmlNodeType.Text, doc, 0)
            replacementNode.InnerHtml = culpritNodeText
            culpritNode.ParentNode.ChildNodes.Insert(culpritNodeIndex, replacementNode)
            culpritNode.Remove()

        Next
    End If

    doc.Save(fileName)

ASPX文件不是HTML文件。使用HTMLAgility pack来实现这一点可能不是最好的方法。您是否测试过通过HTMLAgility pack查看表达式往返是否正确

更简单的方法是在VisualStudio中使用正则表达式替换功能。单击“替换”100次要比编写和调试此代码容易得多

正则表达式将类似于:-

查找:

\<td style=:q\>\n:Wh*\<span class={:q}\>
\\n:Wh*\
替换:

\<td class=\1\>
\

非常感谢您在这里的意见。也许HTML敏捷包不是用于aspx文件的方式。但我不认为VS中的替换功能会有什么改进。首先,我需要学会用愚蠢的和有味道的正则表达式来编写正则表达式。我将无法使用替换-我将用什么替换它?据我所知,VS不够聪明,无法找出哪个元素是跨度的父元素,并在其上应用类-这仍然需要手动操作。如果td和跨度相邻,则不需要了解父子关系。添加了一个用于示例演示的示例正则表达式替换。它们不一定相邻。
\<td class=\1\>