Så svært er det heller ikke.
Her er et eksempel:
using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.Serialization;
public class C1
{
public C2 c2;
}
public class C2
{
public string s;
}
class MainClass
{
private static void standard(C1 c1)
{
Console.WriteLine("Standard:");
XmlSerializer ser = new XmlSerializer(typeof(C1));
ser.Serialize(Console.Out, c1);
Console.WriteLine();
}
private static void transformed(C1 c1)
{
Console.WriteLine("Transformed:");
XmlSerializer ser = new XmlSerializer(typeof(C1));
StringWriter sw = new StringWriter();
ser.Serialize(sw, c1);
XmlDocument doc = new XmlDocument();
doc.LoadXml(sw.ToString());
XslTransform xslt = new XslTransform();
xslt.Load("C:\\C1.xsl");
XmlTextWriter wrt = new XmlTextWriter(Console.Out);
wrt.Formatting = Formatting.Indented;
xslt.Transform(doc, null, wrt, null);
Console.WriteLine();
}
public static void Main(string[] args)
{
C1 c1 = new C1();
c1.c2 = new C2();
c1.c2.s = "test";
standard(c1);
transformed(c1);
}
}
C1.xsl indeholder:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="
http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="C1">
<C1>
<xsl:apply-templates/>
</C1>
</xsl:template>
<xsl:template match="c2">
<c2>
<xsl:apply-templates/>
</c2>
</xsl:template>
<xsl:template match="s">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
Output ser ud som:
Standard:
<?xml version="1.0" encoding="IBM437"?>
<C1 xmlns:xsd="
http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"> <c2>
<s>test</s>
</c2>
</C1>
Transformed:
<C1>
<c2>test</c2>
</C1>
hvor vi ser at <s></s> er forsvundet.