0

現在、ajax を使用して XML フィードを webapp にプルしています。明らかに、私はjqueryを使用してそれを解析するのが好きです:

$(source).find("item"); 

これに関する問題は、タグを含むすべてがノードに変換されることです。これがある種の RSS フィードであり、フィードに完全な記事 (画像ギャラリーを含む) が含まれていることを考えると、多くの img タグがあります。これを防ぐために、img タグを次のように変換してみます。

前:

<img src="path_to_img.jpg" width="450" height="199" alt="alt description" title="image title" class="image_classes" />

後:

<image>
<src>path_to_img.jpg</src>
<alt>alt description</alt>
<title>image title</title>
<class>image_classes</class>
</image>

正規表現を使用するよりも優れた提案があれば、もちろんそれも歓迎します。しかし、それらはすべてテキストのように扱わなければならないため、画像が DOM に追加されるとプリロードが開始されることを考えると、ほとんどないのではないかと思います。

4

3 に答える 3

0

これらの属性がすべて常に存在し、常に引用符で囲まれた文字列などであることが保証されない限り、これは非常に簡単なことではありません。

var html = '<img src="path_to_img.jpg" width="450" height="199" alt="alt description" title="image title" class="image_classes" />';
var regex = /<img .*?(src|alt|title|class)="([^"]*)" .*?(src|alt|title|class)="([^"]*)" .*?(src|alt|title|class)="([^"]*)" .*?(src|alt|title|class)="([^"]*)".*?\/?>/g;
var xmlTemplate = '<image><$1>$2</$1><$3>$4</$3><$5>$6</$5><$7>$8</$7></image>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​';
var xml = html.replace(regex, xmlTemplate);

.replace(regex, func)ソースHTMLがそれほど均一でない場合は、の代わりにを使用する必要があるかもしれません.replace(regex, string)

alt属性が存在しない可能性があると述べたように、次のような関数で正規表現を使用する必要があります。

var html = '<img src="path_to_img.jpg" width="450" height="199" alt="alt description" title="image title" class="image_classes" />';
var regex = /<img .*?>/gi;
function getAttributeValue(tag, attribute)
{
    var regex = new RegExp('\\b' + attribute + '="([^"]*)"', 'i');
    var match = tag.match(regex);
    return '\t<' + attribute + '>' + (match ? match[1] : '') + '</' + attribute + '>\n';
}

var xml = html.replace(regex, function($0)
{
    var xml = '<image>\n';
    xml += getAttributeValue($0, 'src');
    xml += getAttributeValue($0, 'alt');
    xml += getAttributeValue($0, 'title');
    xml += getAttributeValue($0, 'class');
    xml += '</image>';
    return xml;
});
于 2012-06-21T09:10:09.837 に答える
0

HTMLに存在しない場合、altタグがxmlから完全に除外されても構わない場合は、これを使用できます。

var regex = /\s+(src|alt|title|class)\s*=\s*"([^"]+)"/gi;
var res;
var xml = '<image>\n';
while ((res = regex.exec(html)) !== null) {
    xml += "\t<" + res[1] + ">" + res[2] + "</" + res[1] + ">\n";
}
xml += "</image>";
于 2012-06-21T10:30:47.320 に答える
0

これは、src と alt の最初の 2 つの属性のみの例です。

HTMLstring.replace(new RegExp("<img src=\"([^\"]+)\".*alt=\"([^\"]+)\"","gm"), "<image><src>$1</src><alt>$2</alt></image>")

一部の属性が欠落している可能性があると予想される場合は、|オペレーターを使用してすべての代替手段を管理するか、タグからキーと値のペアのセットを抽出imgしていくつかの js で結合する混合アプローチを使用できます。

    $.each(HTMLstring.replace(/<img ([^ =]+)="([^"]+).*\/>/), function () {
        <do_what_you_need_with($1, $2)>
    });
于 2012-06-21T09:00:14.023 に答える