Note that there are some explanatory texts on larger screens.

plurals
  1. POWhat am I doing wrong here, having issues with XSLT using C#
    primarykey
    data
    text
    <p>Please take a look at the following code, as I get the error at this line:</p> <pre><code>xslt.Transform(mydoc.CreateReader(), writer); </code></pre> <p>Error:</p> <p>Step into: Stepping over non-user code 'System.Xml.Linq.XNode.CreateReader' A first chance exception of type 'System.NullReferenceException' occurred in System.Data.SqlXml.dll</p> <p>((System.NullReferenceException)(ex))</p> <pre><code>PromotionsDataContext db = new PromotionsDataContext(); //XmlDocument myxml; XElement Categories = new XElement("Promotions", from b in db.GetPromotions() select new XElement("Promotion", new XElement("Category", b.CategoryName), new XElement("Client", b.ClientName), new XElement("Title", b.Title))); XDocument mydoc = new XDocument(); mydoc.Add(Categories); try { XDocument newTree = new XDocument(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; settings.ConformanceLevel = ConformanceLevel.Fragment; settings.CloseOutput = false; //using (XmlWriter writer = newTree.CreateWriter()) using (XmlWriter writer = XmlWriter.Create(newTree.CreateWriter(), settings)) { // Load the style sheet. XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load(XmlReader.Create(new FileStream(@"C:\1\TransList.xslt", System.IO.FileMode.Open))); // Execute the transform and output the results to a writer. xslt.Transform(mydoc.CreateReader(), writer); } Console.WriteLine(newTree); } catch (Exception ex) { Console.Write(ex); } </code></pre> <p>Here is the XSLT:</p> <pre><code>&lt;xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'&gt; &lt;xsl:output method='xml' /&gt; &lt;xsl:key name='categories' match='Category' use='.' /&gt; &lt;xsl:template match='/'&gt; &lt;xsl:for-each select="/Promotions/Promotion/Category[ generate-id(.) = generate-id(key('categories', .)[1]) ]"&gt; &lt;xsl:variable name='cname' select='.' /&gt; &lt;Category title='{.}'&gt; &lt;xsl:for-each select='/Promotions/Promotion[Category=$cname]'&gt; &lt;Title&gt; &lt;xsl:value-of select='Title' /&gt; &lt;/Title&gt; &lt;/xsl:for-each&gt; &lt;/Category&gt; &lt;/xsl:for-each&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p>The error:</p> <p>System.NullReferenceException: Object reference not set to an instance of an object. at System.Xml.Xsl.Runtime.XmlMergeSequenceWriter.StartTree(XPathNodeType rootType, IXmlNamespaceResolver nsResolver, XmlNameTable nameTable) at System.Xml.Xsl.Runtime.XmlQueryOutput.StartTree(XPathNodeType rootType) at System.Xml.Xsl.Runtime.XmlQueryOutput.WriteStartRoot() at Root(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime) at Execute(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime) at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer, Boolean closeWriter) at System.Xml.Xsl.XmlILCommand.Execute(XmlReader contextDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter results) at System.Xml.Xsl.XslCompiledTransform.Transform(XmlReader input, XsltArgumentList arguments, XmlWriter results) at Promo.Page_Load(Object sender, EventArgs e) in c:\1\promo.ascx.cs:line 144</p> <p>Now if I do this it works: </p> <pre><code>StringWriter sw = new StringWriter(); xslt.Transform(mydoc.CreateReader(),null, sw); </code></pre> <p>What am I doing wrong with the XmlWriter?</p> <p>Value of xdoc right before crash:</p> <pre><code>&lt;Promotions&gt; &lt;Promotion&gt; &lt;Category&gt;Arts &amp;amp; Entertainment&lt;/Category&gt; &lt;Client&gt;Client1&lt;/Client&gt; &lt;Title&gt;Get your Free 2&lt;/Title&gt; &lt;/Promotion&gt; &lt;Promotion&gt; &lt;Category&gt;Arts &amp;amp; Entertainment&lt;/Category&gt; &lt;Client&gt;Client1&lt;/Client&gt; &lt;Title&gt;Get your Free 4&lt;/Title&gt; &lt;/Promotion&gt; &lt;Promotion&gt; &lt;Category&gt;Arts &amp;amp; Entertainment&lt;/Category&gt; &lt;Client&gt;client1&lt;/Client&gt; &lt;Title&gt;Get your Free 5&lt;/Title&gt; &lt;/Promotion&gt; &lt;Promotion&gt; &lt;Category&gt;Community &amp;amp; Neighborhood&lt;/Category&gt; &lt;Client&gt;Client2&lt;/Client&gt; &lt;Title&gt;Get your Free 1&lt;/Title&gt; &lt;/Promotion&gt; &lt;Promotion&gt; &lt;Category&gt;Education&lt;/Category&gt; &lt;Client&gt;Client3&lt;/Client&gt; &lt;Title&gt;Get Your Free 3&lt;/Title&gt; &lt;/Promotion&gt; &lt;/Promotions&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload