HTML 민첩성 팩을 사용하여 HTML 소스 코드에 개행을 추가하십시오.

html html-agility-pack vb.net

문제

HTML 민첩성 팩을 사용하여 HTML 파일을 수정하려고합니다.

다음은 테이블을 포함하는 HTML 파일의 예입니다.

Dim document As New HtmlDocument
Dim tables As Array

document.Load(path_html)

Dim div1 As HtmlNode = HtmlNode.CreateNode("<div></div>")
Dim div2 As HtmlNode = HtmlNode.CreateNode("<div></div>")

tables = document.DocumentNode.Descendants("table").ToArray()

For Each tr As HtmlNode In tables.Descendants("tr").ToArray
   tr.AppendChild(div1)
   tr.AppendChild(div2)
Next

document.save(path_html)

다음은 HTML 파일의 결과입니다.

<div></div><div></div>

내가 원하는 것은 :

<div></div>
<div></div>

HTML 파일이 불명확 해지면 기본적으로 구현되어야한다고 생각합니다.

나는이 질문을 (내 정확한 문제입니다) 여기에 보았지만 대답은 나를 위해 (어쩌면 VB.NET과 대답은 C # 때문에) 작동하지 않습니다.

누구든지 도와 줄 수 있습니까?

수락 된 답변

오랫동안 vb.net 을 작성하지 않았으므로 C# 에서 처음 시도했습니다.

var document = new HtmlDocument();
var div = HtmlNode.CreateNode("<div></div>");
var newline = HtmlNode.CreateNode("\r\n");
div.AppendChild(newline);
for (int i = 0; i < 2; ++i)
{
    div.AppendChild(HtmlNode.CreateNode("<div></div>"));
    div.AppendChild(newline);
}
document.DocumentNode.AppendChild(div);
Console.WriteLine(document.DocumentNode.WriteTo());

훌륭한 작품 - 출력 :

<div>
<div></div>
<div></div>
</div>

그런 다음 생각 해봐, " 안돼 .... 그럴 수 없어 "- 주석 처리 된 줄을 메모하십시오 :

Dim document = New HtmlDocument()
Dim div = HtmlNode.CreateNode("<div></div>")
' this writes the literal string...
Dim newline = HtmlNode.CreateNode("\r\n")
' this works!
' Dim newline = HtmlNode.CreateNode(Environment.NewLine)
div.AppendChild(newline)
For i = 1 To 2
    div.AppendChild(HtmlNode.CreateNode("<div></div>"))
    div.AppendChild(newline)
Next
document.DocumentNode.AppendChild(div)
Console.WriteLine(document.DocumentNode.WriteTo())

불행히도 그것은 사실이며, 아마도 당신이 링크질문에 대답하지 않은 이유는 무엇입니까? - 결과물 :

<div>\r\n<div></div>\r\n<div></div>\r\n</div>

마지막으로 바꿈 대신 열을 사용 \r\n 시도 Environment.NewLine 작업 및 출력 않는다 :

<div>
<div></div>
<div></div>
</div>

C #에서 작동합니다.


인기 답변

을 기반으로 캐리지 리턴 ( \r )과 줄 바꿈 ( \n )을 나타내는 노드를 추가해야합니다.

Dim newLineNode As HtmlNode = HtmlNode.CreateNode("\r\n")

귀하의 의견을 바탕으로 :

나는 이것을 시도했지만 HTML에 '\ r \ n'을 추가한다.

이미 시도한 대신 문자열 리터럴 "\ r \ n"을 출력합니다. 나도이 문제를 재현 할 수 있었다.

대신 줄 바꿈 인 <br> 태그를 사용하여 살펴보십시오.

Dim newLineNode As HtmlNode = HtmlNode.CreateNode("<br>")

귀하의 예제 코드를 기반으로 귀하의 코드는 다음과 같이 보일 것입니다 :

Dim newLineNode As HtmlNode = HtmlNode.CreateNode("<br>")

For Each tr As HtmlNode In tables.Descendants("tr").ToArray
   tr.AppendChild(div1)
   tr.AppendChild(newLineNode)
   tr.AppendChild(div2)
Next

그러나 tables.Descendants("tr").ToArray 는 나에게 컴파일 오류를 제공했다. 이것이이 질문의 범위를 벗어나므로 문제를 제기하지 않았지만 나는 그것이 당신을 위해 일한다는 가정을 할 것입니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.