Pages

Tuesday, September 3, 2013

Pass xml as a array type parameter to the xslt.

 Method
 -----------------------
public void one1()
    {
        StringWriter sw = new StringWriter();
        XmlTextWriter w = new XmlTextWriter(sw);
        w.WriteStartElement("root");
        for (int i = 0; i < 10; i++)
            w.WriteElementString("val", "value" + i);
        w.WriteEndElement();
        w.Close();
        //XmlNodeWriter should be used instead of temporary string
        XPathDocument doc = new XPathDocument(new StringReader(sw.ToString()));
        XPathNavigator nav = doc.CreateNavigator();
        XsltArgumentList args = new XsltArgumentList();
        args.AddParam("array", "", nav.Select("/root/*"));

        XPathDocument input = new XPathDocument(MapPath("xmls//xml1.xml"));
        XslTransform xslt = new XslTransform();
        xslt.Load(MapPath("xslts//array1.xslt"));
        StringBuilder htmlOutput = new StringBuilder();
        TextWriter htmlWriter = new StringWriter(htmlOutput);
        xslt.Transform(input, args, htmlWriter);
        string str = htmlOutput.ToString();
    }



xml1.xml
---------------

<?xml version="1.0" encoding="utf-8" ?>
<Users>
  <User Id="1">
    <Name>Prateek</Name>
    <City>Bareilly</City>
  </User>
  <User Id="2">
    <Name>Ankit</Name>
    <City>Delhi</City>
  </User>
  <User Id="3">
    <Name>Navin</Name>
    <City>Gorakhpur</City>
  </User>
  <User Id="4">
    <Name>Ankit</Name>
    <City>Lucknow</City>
  </User>
</Users>




array1.xslt
----------------------

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:param name="array"/>
  <xsl:template match="/">
      <xsl:for-each select="$array">
        <xsl:copy-of select="$array"/>
        <!--<xsl:copy-of select="$array[2]"/>-->
      </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

No comments:

Post a Comment