Windows PhoneでHtmlAgilityPackを使用して画像へのリンクを追加する

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

質問

HTMLのすべての画像へのリンクを、画像の「src」属性である「href」属性の値とともに追加したいとします。つまり、

 "<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
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow