.net 如何使用HTML Agility Pack修复HTML
我有数百个ASPX文件,需要重构一下。我多次出现此代码:.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来选择重构的目标范
<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\>