Мне действительно нравятся регулярные выражения. Пока командные строки довольно просты, можно записать несколько regexes, которые могли взять несколько страниц кода для ручного парсинга.
я предложил бы, чтобы Вы проверили http://www.regular-expressions.info для хорошего введения к regexes, а также определенных примеров для Java.
Как насчет:
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
(он отмечен как устаревшие).
Ради удовольствия, чуть менее элегантная версия, которая реализует кеширование, предложенное Марком:
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;
}