Встраивание CSS в C #

Мне нужно встроить css из таблицы стилей в C #.

Как это работает.

http://www.mailchimp.com/labs/inlinecss.php

CSS прост, только классы, никаких изящных селекторов.

Я собирался использовать регулярное выражение (? (? [^ {}] +) {(? , чтобы удалить правила из CSS, а затем попытаться выполнить простую замену строк, где классы называются, но у некоторых элементов html уже есть тег стиля, поэтому мне придется это учитывать.

Есть ли более простой подход? Или что-то уже написанное на C #?

ОБНОВЛЕНИЕ - 16 сентября 2010 г.

Я смог придумать простой инлайнер CSS при условии, что ваш html также является допустимым xml. Он использует регулярное выражение для получения всех стилей в вашем элементе . Затем преобразует селекторы css в выражения xpath и добавляет встроенный стиль к соответствующим элементам перед любым ранее существовавшим встроенным стилем.

Обратите внимание, что CssToXpath реализован не полностью, есть некоторые вещи, которые он просто не может делать ... пока.

CssInliner.cs

using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Xml.Linq;
using System.Xml.XPath;

namespace CssInliner
{
    public class CssInliner
    {
        private static Regex _matchStyles = new Regex("\\s*(?(?[^{}]+){(?
                                        
                                        
                                            
Hello, World!
").ToString(); #endregion #region const string expected ... var expected = XElement.Parse(@" Hello, World Page!
Hello, World!
").ToString(); #endregion var result = new CssInliner.CssInliner(html); Assert.AreEqual(expected, result.InlinedXhtml); }

Есть еще тесты, но они импортируют html-файлы для ввода и ожидаемого вывода, и я не публикую все который!

Но я должен опубликовать методы расширения Normalize!

private static readonly Regex NormalizeSpaceRegex = new Regex(@"\s{2,}", RegexOptions.None);
public static string NormalizeSpace(this string data)
{
    return NormalizeSpaceRegex.Replace(data, @" ");
}

public static string NormalizeCharacter(this string data, char character)
{
    var normalizeCharacterRegex = new Regex(character + "{2,}", RegexOptions.None);
    return normalizeCharacterRegex.Replace(data, character.ToString());
}

27
задан CaffGeek 16 September 2010 в 16:50
поделиться