HI All!
Its been a long time since my last post. I finally got something which I feel need to be posted else I will have a hard
time finding it later.
Ok, one of my recent quests was how to remove duplicate nodes from an xml like below
<?xml version="1.0" encoding="utf-16"?>
<country>
<state>
<count>19</count>
<city>
<street name="id" value="1" />
<street name="name" value="MGROAD" />
</city>
<city>
<street name="id" value="2" />
<street name="name" value="SAVOY" />
</city>
<city>
<street name="id" value="3" />
<street name="name" value="MTBATTENROAD" />
</city>
</state>
</country>
Now if we want to transform this XML into another XML without the repeating
<street id="1" name="MGROAD" /> tag then the xsl to be used is thus :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match ="count">
</xsl:template>
<xsl:template match="city">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<street>
<xsl:attribute name ="id">
<xsl:value-of select ="current()/self::node()/street[@name='id']/@value"/>
</xsl:attribute>
<xsl:attribute name ="name">
<xsl:value-of select ="current()/self::node()/attribute[@name='name']/@value"/>
</xsl:attribute>
</attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Transform this using XSLT
XmlDocument stripper = new XmlDocument();
stripper.Load(Server.MapPath("~/App_Data/transform.xsl")); //Compile here
StringWriter output = new StringWriter();
XslCompiledTransform emptyNodeRemover = new XslCompiledTransform();
emptyNodeRemover.Load(stripper); //Port output to string
output = new StringWriter();
XmlDocument source = new XmlDocument();
source.Load(Server.MapPath("~/App_Data/response.xml"));
emptyNodeRemover.Transform(new XmlNodeReader(source), null, output);
output.Flush(); //Reload source with emptied nodes
source.LoadXml(output.ToString());
The above xsl also specifies to restructure the xml file into
<?xml version="1.0" encoding="utf-16"?>
<country>
<state>
<count>19</count>
<city>
<street id="1" name="MGROAD" />
</city>
<city>
<street id="2" name="SAVOY" />
</city>
<city>
<street id="3" name="MTBATTENROAD" />
</city>
</state>
</country>
Now this transformed XML can be fed into a telerik RadGrid successfully as it is the format it accepts.
Cheers!
Thursday, June 10, 2010
Remove duplicate nodes from an XML using XSL
HI All!
Its been a long time since my last post. I finally got something which I feel need to be posted else I will have a hard time finding it later.
Ok, one of my recent quests was how to remove duplicate nodes from an xml like below
19
Now if we want to transform this XML into another XML without the repeating
" tag then the xsl to be used is thus :
Transform this using XSLT
XmlDocument stripper = new XmlDocument();
stripper.Load(Server.MapPath("~/App_Data/transform.xsl")); //Compile here
StringWriter output = new StringWriter();
XslCompiledTransform emptyNodeRemover = new XslCompiledTransform();
emptyNodeRemover.Load(stripper); //Port output to string
output = new StringWriter();
XmlDocument source = new XmlDocument();
source.Load(Server.MapPath("~/App_Data/response.xml"));
emptyNodeRemover.Transform(new XmlNodeReader(source), null, output);
output.Flush(); //Reload source with emptied nodes
source.LoadXml(output.ToString());
The above xsl also specifies to restructure the xml file into
19
Now this transformed XML can be fed into a telerik RadGrid successfully as it is the format it accepts.
Cheers!
Its been a long time since my last post. I finally got something which I feel need to be posted else I will have a hard time finding it later.
Ok, one of my recent quests was how to remove duplicate nodes from an xml like below
Now if we want to transform this XML into another XML without the repeating
Transform this using XSLT
XmlDocument stripper = new XmlDocument();
stripper.Load(Server.MapPath("~/App_Data/transform.xsl")); //Compile here
StringWriter output = new StringWriter();
XslCompiledTransform emptyNodeRemover = new XslCompiledTransform();
emptyNodeRemover.Load(stripper); //Port output to string
output = new StringWriter();
XmlDocument source = new XmlDocument();
source.Load(Server.MapPath("~/App_Data/response.xml"));
emptyNodeRemover.Transform(new XmlNodeReader(source), null, output);
output.Flush(); //Reload source with emptied nodes
source.LoadXml(output.ToString());
The above xsl also specifies to restructure the xml file into
Now this transformed XML can be fed into a telerik RadGrid successfully as it is the format it accepts.
Cheers!
Subscribe to:
Comments (Atom)