А почему бы и нет
Вот код для начала:
using NN.Xml;
module Program
{
Main() : void
{
def f()
{
XSLTransform("a.xslt", "a.xml");
}
f();
}
}
Это код для демонстрации, тему нужно еще развивать конечно.
На мой вгляд нужная вещь в Nemerle.Xml.
Что скажете ?
Код:
using System.IO;
using System.Xml;
using Nemerle.Compiler;
using Nemerle;
namespace NN.Xml
{
public macro XSLTransform(xsltPath : string, xmlPath : string)
{
def xslt = Xsl.XslCompiledTransform();
xslt.Load(xsltPath);
def sw = StringWriter();
xslt.Transform(XPath.XPathDocument(xmlPath.ToString()), null, sw);
def output = MainParser.ParseExpr(Macros.ImplicitCTX().Env, sw.ToString());
<[ $output ]>;
}
}
a.xml:
<?xml version="1.0" encoding="utf-8"?>
<a>
<b>System.Console.WriteLine("Hello World!");</b>
</a>
a.xslt:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:template match="a/b">
<xsl:value-of select="text()"/>
</xsl:template>
</xsl:stylesheet>