У меня есть сотни 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>
в правильном месте. Я бы сделал RTFM, если бы смог найти TFM, но он не очень хорошо документирован. Вот то, что я придумал (это исключение). Как вставить текст в правильное место?
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)