From b62bb260ec7df8a51fadcbe09a0831aebaa5fe89 Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Fri, 9 Aug 2013 19:47:20 +0900 Subject: [PATCH] Fix bug #4344 - xsl:stylesheet always ignored xsl template contents. --- .../System.XML/Mono.Xml.Xsl/XslStylesheet.cs | 3 ++ .../Test/System.Xml.Xsl/XslTransformTests.cs | 33 +++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/mcs/class/System.XML/Mono.Xml.Xsl/XslStylesheet.cs b/mcs/class/System.XML/Mono.Xml.Xsl/XslStylesheet.cs index 31a488b7b81a9..4950c30aadd24 100644 --- a/mcs/class/System.XML/Mono.Xml.Xsl/XslStylesheet.cs +++ b/mcs/class/System.XML/Mono.Xml.Xsl/XslStylesheet.cs @@ -376,6 +376,8 @@ private void HandleInclude (Compiler c) return; // Already done. c.PushInputDocument (included); + included.MoveToRoot (); + included.MoveToFirstChild (); while (c.Input.NodeType != XPathNodeType.Element) if (!c.Input.MoveToNext ()) @@ -387,6 +389,7 @@ private void HandleInclude (Compiler c) templates.Add (new XslTemplate (c)); } else { + c.Input.MoveToFirstChild (); do { if (c.Input.NodeType != XPathNodeType.Element) continue; diff --git a/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs b/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs index b276342806c17..16573e3beee8c 100644 --- a/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs +++ b/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs @@ -2226,7 +2226,6 @@ public void RejectCurrencySymbolAsNumber () Assert.IsTrue (sw.ToString ().IndexOf ("NO") > 0); } -#if NET_2_0 [Test] // bug #349375 public void PreserveWhitespace () { @@ -2416,6 +2415,36 @@ public void define_text_constant (string name, string value) } private bool valueHasBeenSet; -#endif + + [Test] // bug #4434 + public void IncludeProcessStylesheet () + { + string includedXsl = @" + + + + + +"; + StreamWriter includedWriter = new StreamWriter ("include.xsl"); + includedWriter.WriteLine (includedXsl); + includedWriter.Close (); + XslCompiledTransform transform = new XslCompiledTransform (); + string xsl = @" + + + + + +"; + XmlReader xslReader = XmlReader.Create (new StringReader (xsl)); + transform.Load (xslReader); + XmlReader inputReader = XmlReader.Create (new StringReader ("")); + var sw = new StringWriter (); + XmlWriter outputWriter = XmlWriter.Create (sw); + transform.Transform (inputReader, outputWriter); + outputWriter.Close (); + Assert.AreEqual ("", sw.ToString (), "#1"); + } } }