2011-02-12 4 views
0

나는 리펙토링을 위해 수백 가지의 ASPX 파일을 가지고있다.HTML 민첩성 팩으로 HTML을 수정하는 방법

<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> 

훨씬 더 깨끗합니다! 그리고 을 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) 

답변

2

ASPX 파일은 HTML 파일이 아닙니다. 이를 위해 HTMLAgility 팩을 사용하는 것이 최선의 방법은 아닙니다. HTMLAgility 팩을 통해 <%...%> 표현식이 올바르게 왕복되는지 테스트 했습니까?

더 쉬운 방법은 Visual Studio의 바꾸기 기능을 정규식으로 사용하는 것입니다. 100 번 '바꾸기'를 클릭하면이 코드를 작성하고 디버깅하는 것보다 훨씬 쉽습니다.

\<td class=\1\> 
+0

내가 여기에 귀하의 의견을 주셔서 감사합니다 :

찾기 :

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

바꾸기 - :

정규식은 같을 것입니다. 어쩌면 HTML 민첩성 팩은 aspx 파일로가는 길이 아닙니다. 그러나 VS에서 Replace 기능이 더 나은 것으로는 보이지 않습니다. 먼저 정규 표현식을 어리석은 VS- 맛의 정규 표현식으로 작성하는 법을 배워야합니다. 나는 대체품을 사용할 수 없을 것입니다. 대체 할 수있는 것은 무엇입니까? 내가 아는 한, VS는 스팬의 상위 요소를 파악하고 그 대신 클래스를 적용 할만큼 똑똑하지 않습니다. 여전히 수동이어야합니다. –

+0

td와 범위가 인접한 경우 부모 - 자식 관계에 대해 알 필요가 없습니다. 예제보기에서 작동하는 샘플 regex replace를 추가했습니다. –

+0

반드시 인접하지는 않습니다. –

관련 문제