0

例:色のプロパティを保持するだけです。

与えられた:

<span style="margin-left: 2em;color: #008000;font-size:14px;">some text</span>

出力:

<span style="color: #008000;">some text</span>

4

3 に答える 3

1

Xml.Linqを使用したソリューションのスケッチを次に示します。

XElement Load(string xml)
{
    using (var reader = new StringReader(xml))
        return XElement.Load(reader);
}

string ProcessStyles(string input)
{
    var root = Load(input);
    var allElements = root.Descendants();
    var styleAttributes = allElements.Select(e => e.Attribute(XName.Get("style"))).Where(a => a != null);
    foreach (var styleAttribute in styleAttributes)
    {
        var value = styleAttribute.Value;
        var newValue = ProcessCss(value);
        styleAttribute.SetValue(newValue);
    }

    return root.ToString();
}

string ProcessCss(string value)
{
    var cssTokens = value.Split(';').Select(t => t.Trim());

    // implement your filtering rules here
    var filtered = cssTokens.Where(t => t.StartsWith("color"));

    return String.Join(";", filtered);
}

このソリューションは、「スタイル」属性の特定の構造を前提としています。より複雑なCSS(コメントなど)では機能しません。

また、入力文字列は整形式のXMLドキュメントである必要があることに注意してください。(HTML5は通常、整形式のXMLである必要はありません)。

于 2012-04-15T12:56:23.713 に答える
1

この回答は、JavaScriptが使用されていることを前提に書かれています。この回答は(その仮定の下で)まだ有用ですが、言語はC#として指定されています。したがって、この答えは正しくありません。


HTMLを考えると:

<span style="margin-left: 2em;color: #008000;font-size:14px;">some text</span>

次のJavaScriptが機能するはずです(現在テストされていません)。

var spans = document.getElementsByTagName('span'),
    color;

for (var i=0,len=spans.length;i<len;i++){
    color = spans[i].style.color;
    spans[i].removeAttribute('style');
    spans[i].style.color = color;
}​

JSフィドルデモ

于 2012-04-15T12:38:29.860 に答える
0

この作業を行うために正規表現を使用したい場合は、ここにいくつかのコードスニペットがあります。ただし、これはオブジェクトで処理することをお勧めしstyleます。

探すstyle=\"[^\"]*?([cC]olor:\s#[0-9a-fA-F]{1,6};?)[^\"]*?\"

と置換するstyle="$1"

于 2012-04-16T11:47:54.517 に答える