Самый простой способ преобразовать XML к HTML с XSLT в C#?

Мне действительно нравятся регулярные выражения. Пока командные строки довольно просты, можно записать несколько regexes, которые могли взять несколько страниц кода для ручного парсинга.

я предложил бы, чтобы Вы проверили http://www.regular-expressions.info для хорошего введения к regexes, а также определенных примеров для Java.

20
задан Shaul says I Support Monica 22 November 2009 в 09:48
поделиться

2 ответа

Как насчет:

public static string TransformXMLToHTML(string inputXml, string xsltString)
{
    XslCompiledTransform transform = new XslCompiledTransform();
    using(XmlReader reader = XmlReader.Create(new StringReader(xsltString))) {
        transform.Load(reader);
    }
    StringWriter results = new StringWriter();
    using(XmlReader reader = XmlReader.Create(new StringReader(inputXml))) {
        transform.Transform(reader, null, results);
    }
    return results.ToString();
}

Обратите внимание, что в идеале вы должны кэшировать и повторно использовать XslCompiledTransform - или, возможно, использовать вместо него XslTransform (он отмечен как устаревшие).

38
ответ дан 29 November 2019 в 23:44
поделиться

Ради удовольствия, чуть менее элегантная версия, которая реализует кеширование, предложенное Марком:

    public static string TransformXMLToHTML(string inputXml, string xsltString)
    {
        XslCompiledTransform transform = GetAndCacheTransform(xsltString);
        StringWriter results = new StringWriter();
        using (XmlReader reader = XmlReader.Create(new StringReader(inputXml)))
        {
            transform.Transform(reader, null, results);
        }
        return results.ToString();
    }

    private static Dictionary<String, XslCompiledTransform> cachedTransforms = new Dictionary<string, XslCompiledTransform>();
    private static XslCompiledTransform GetAndCacheTransform(String xslt)
    {
        XslCompiledTransform transform;
        if (!cachedTransforms.TryGetValue(xslt, out transform))
        {
            transform = new XslCompiledTransform();
            using (XmlReader reader = XmlReader.Create(new StringReader(xslt)))
            {
                transform.Load(reader);
            }
            cachedTransforms.Add(xslt, transform);
        }
        return transform;
    }
4
ответ дан 29 November 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: