그래서 Windows Store App의 HTML을 Markdown으로 변환하는 코드를 작성하려고합니다. 지금까지 HtmlAgilityPack을 사용하여 많은 성공을 거두었지만 문제가 발생했습니다.HtmlAgilityPack으로 중첩 된 요소 처리
는 여기에 몇 가지 샘플 HTML
<p>A paragraph of text, including some text which is <strong>bolded</strong></p>
<p>Another paragraph</p>
의 나는 다음과 같은 코드를 사용하여이 문제를 처리합니다.
foreach (var x in doc.Descendants.Where(x => x.Name == "p").ToList())
{
x.ParentNode.ReplaceChild(
HtmlAgilityPack.HtmlNode.CreateNode(x.InnerHtml
+ Environment.NewLine
+ Environment.NewLine),
x);
}
예상 출력은
A paragraph of text, including some text which is <strong>bolded</strong>
Another paragraph
이다 그러나 실제 출력은 그냥 그 시점 이후에 모든 것을 무시 중첩 노드 안타 그것은 곧 것 같다
A paragraph of text, including some text which is
Another paragraph
입니다.
strong
태그를 처리하기 전에 규칙이 있으면 예상대로 출력됩니다. 그러나 "순서대로"일을하는 데 의존 할 수는 없습니다. p
내에서 p
내가 뭘 잘못하고 있니?
참고이 윈도우 스토어 앱을위한 것이며, 하지 지원 XPath에
당신이 옳다고 확신? 나는 아직 테스트를하지 않았지만 우리가 방금 생성 한 이후로'node'는 어떤 자식도 가지지 않을 것입니다. – roryok
내 코드는 [CreateNode] (https://htmlagilitypack.codeplex.com/SourceControl/latest#Trunk/HtmlAgilityPack/HtmlNode.cs)의 원본 소스 코드를 기반으로합니다. HTML을 입력하면 새 노드를 만드는 동안 잃어 버리는 다른 태그가 포함될 수 있습니다. 나에게 바람직하지 않은 행동처럼 보이지만 그 문제가 해결 될 때까지 위의 코드에서 첫 번째보다는 모든 형제를 얻을 수 있습니다. 솔루션보다는 해결 방법입니다. –
네,하지만 예제에서는 CreateNode로'node'라는 텍스트 노드를 만든 다음'node.ParentNode.ChildNodes'를 즉시 반복합니다. 그 시점에서'node'에는 부모 나 자식이 없습니다? – roryok