Windows Phone에서 HtmlAgilityPack을 사용하여 이미지에 링크 추가

c# html-agility-pack windows-phone-7

문제

href "속성의 값을 이미지의"src "속성으로하여 HTML의 모든 이미지에 대한 링크를 추가하고 싶습니다. 즉

 "<p> <img src="test.jpg"/></p>"

<p><a href="test.jpg"><img src="jpg"/></a></p>

그리고 내 코드가오고 :

using HtmlAgilityPack;
var imgs = document.DocumentNode.Descendants("img");
foreach (HtmlNode node in imgs)
{
    if (node.ParentNode.Name != "a")
    {
        string replaceStr = string.Format("<a href=\"{0}\">{1}</a>", node.GetAttributeValue("src", null), node.OuterHtml);
        //node.OuterHtml= replaceStr;   It doesn't work, the outerHtml is readonly
        //node.ParentNode.RemoveChild(node, true);
    }
}

그렇다면 어떻게 작동하도록 코드를 수정해야합니까?

업데이트 : 내 코드를 업데이트 한 후 :

var imgs = document.DocumentNode.Descendants("img");
            foreach (var node in imgs)
            {
                if (node.ParentNode.Name != "a")
                {
                    var a = document.CreateElement("a");
                    a.SetAttributeValue("href", node.GetAttributeValue("src", null));
                    a.ChildNodes.Add(node);
                    node.ParentNode.ReplaceChild(a, node);
                }
            }

"처리되지 않은 InvalidOperationException"오류가 나타납니다.

여기에 이미지 설명을 입력하십시오.

수락 된 답변

먼저 xpath를 사용하여 부모 노드가 <a> 가 아닌 <img> 노드를 선택할 수 있습니다.

var imgs = doc.DocumentNode.SelectNodes("//img[not(parent::a)]").ToList();

그런 다음이 노드를 반복해야합니다. 각 반복 단계에서 새로운 요소 인 appent iteration을 작성한 다음 새로 작성한 <a> :로 바꿉니다.

foreach (var img in imgs)
{
    var a = doc.CreateElement("a");
    a.SetAttributeValue("href", img.GetAttributeValue("src", null));
    a.ChildNodes.Add(img);
    img.ParentNode.ReplaceChild(a, img);
} 

인기 답변

시도해보십시오.

string replaceStr = string.Format("<a href=\"{0}\">{1}</a>", node.GetAttributeValue("src", null), node.OuterHtml);
var newNode = HtmlNode.CreateNode(replaceStr);
node.ParentNode.ReplaceChild(newNode.ParentNode, node);

변경

foreach (var node in imgs)

으로

foreach (var node in imgs.ToList())

노드 교체 HtmlAgilityPack



Related

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