6

Web サイトに CMS システムを使用しています。私のコンテンツ寄稿者は、システムに非常に大きな画像をいくつか入れてから、cms でそれらのサイズを変更して、ページまたは記事に適したものにしました。Web ユーザーがそのページにアクセスすると、寄稿者が画像のサイズを変更しても、完全な画像がダウンロードされます。画像サイズ変更プラグインを見つけたので、src の画像名の後ろに幅と高さのパラメーターを追加するだけです。検索を行うと、これを達成するためにhtmlアジリティパックを使用する必要があるように見えますが、誰かが私のコードを完成させるのを手伝ってくれます. コンテンツ内で img タグを見つける方法はわかりましたが、src に幅と高さを追加する方法がわかりません。

古いタグ

<img src="/IMG_3556E__sq2.jpg?n=9418" id="/IMG_3556E__sq2.jpg?n=9418" width="83px" height="83px" />

これに - src 値が変更されたことに注意してください

<img src="/IMG_3556E__sq2.jpg?width=83&amp;height=83" id="/IMG_3556E__sq2.jpg?n=9418" width="83px" height="83px" />

これはこれまでの私のコードです。必要なのは、if ステートメント内で、img タグに幅または高さが含まれているかどうかを示し、それらを src 属性に追加することだけです。

ContentManager contentManager = new ContentManager();
ContentData Content = contentManager.GetItem(id);

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(Content.Html);

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//img/@src"))
{
    if (//img has a width or height, it means image has been resized) {
        //append that nodes src within the content.html with the ?width=x&height=x
    }
}
4

2 に答える 2

12

これを試して:

static void Main(string[] args)
{
    var htmlDoc = new HtmlDocument();
    htmlDoc.Load(@"E:\Libs\HtmlAgilityPack.1.4.0\htmldoc.html");

    foreach(HtmlNode node in htmlDoc.DocumentNode
                                   .SelectNodes("//img[@src and (@width or @height)]"))
    {
        var src = node.Attributes["src"].Value.Split('?');

        var width = node.Attributes["width"].Value.Replace("px", "");

        var height = node.Attributes["height"].Value.Replace("px", "");

        node.SetAttributeValue("src",
                                src[0] +
                                string.Format("?width={0}&height{1}", width, height));
    }
}
于 2012-07-09T21:06:05.620 に答える
2

srcとwidthまたはheightを持つノードのみを選択するXPathを使用する場合は、次の場合は省略できます。

foreach (HtmlNode node in doc.DocumentNode
    .SelectNodes("//img[@src and (@width or @height)]"))
{
    node.SetAttributeValue("src",  ...);
}

ただし、注意してください。HtmlAgilityPackを覚えている限り、一致するものがない場合、SelectNodesはnullを返します。

于 2012-07-09T21:12:43.513 に答える