我有数百个ASPX文件,我需要重构一下。我有几次这样的代码:
<td style="text-align: right;">
<span class="frmFldLbl">Task (or some other text)</span>
</td>
并且所有frmFldLbl
都定义了颜色和文字大小。所以我想把上面改为:
<td class="frmFldLbl">
Task (or some other text)
</td>
更干净!它的功能相同,因为我也会将text-align: right;
放在frmFldLbl
类定义上。
现在,我只担心让这个工作为一个文件,然后我将添加目录递归和所有好东西。我正在使用HTML Agility Pack来解析HTML文件,并且我可以使用XPATH来选择我用于重构的范围。
我需要做的是,如何在正确的位置将文本插入<td>
的子项中。如果我能找到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)
答案 0 :(得分:2)
ASPX文件不是HTML文件。使用HTMLAgility包执行此操作可能不是最好的方法。您是否通过HTMLAgility包测试了<%...%>
表达式是否正确往返?
更简单的方法是在Visual Studio中使用带有正则表达式的替换功能。单击“替换”100次将比编写和调试此代码容易得多。
RegEx将如下所示: -
查找:
\<td style=:q\>\n:Wh*\<span class={:q}\>
替换:
\<td class=\1\>