You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(174) |
Nov
(85) |
Dec
(14) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(56) |
Feb
|
Mar
|
Apr
|
May
(4) |
Jun
(1) |
Jul
(132) |
Aug
(5) |
Sep
|
Oct
(314) |
Nov
(133) |
Dec
(18) |
2006 |
Jan
(6) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Oleg T. <he...@us...> - 2005-11-19 22:21:25
|
Update of /cvsroot/mvp-xml/Common/v2/test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11321/v2/test Modified Files: CommonTest.csproj EntryPoint.cs Log Message: Index: CommonTest.csproj =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/test/CommonTest.csproj,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- CommonTest.csproj 7 Nov 2005 13:58:18 -0000 1.5 +++ CommonTest.csproj 19 Nov 2005 22:21:10 -0000 1.6 @@ -121,6 +121,7 @@ <Compile Include="Misc.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="MvpXslTransformTests\MvpXslTransformTests.cs" /> <Compile Include="pubsNs.cs"> <SubType>Code</SubType> </Compile> @@ -178,6 +179,8 @@ </Compile> <Compile Include="XslReaderTests\XslReaderTests.cs" /> <Content Include="changelog.txt" /> + <Content Include="MvpXslTransformTests\test.xml" /> + <Content Include="MvpXslTransformTests\test1.xslt" /> <Content Include="XslReaderTests\test1.xslt" /> <EmbeddedResource Include="library.xml" /> <EmbeddedResource Include="northwind.xml" /> Index: EntryPoint.cs =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/test/EntryPoint.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- EntryPoint.cs 7 Nov 2005 13:58:18 -0000 1.1 +++ EntryPoint.cs 19 Nov 2005 22:21:10 -0000 1.2 @@ -9,8 +9,10 @@ { static void Main(string[] args) { - XslReaderTests.XslReaderTests t = new XslReaderTests.XslReaderTests(); - t.Test5(); + //XslReaderTests.XslReaderTests t = new XslReaderTests.XslReaderTests(); + //t.Test5(); + MvpXslTransformTests t = new MvpXslTransformTests(); + t.TestStringOutput(); } } } |
From: Oleg T. <he...@us...> - 2005-11-19 22:21:25
|
Update of /cvsroot/mvp-xml/Common/v2/test/XslReaderTests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11321/v2/test/XslReaderTests Modified Files: test1.xslt Log Message: Index: test1.xslt =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/test/XslReaderTests/test1.xslt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- test1.xslt 7 Nov 2005 13:58:19 -0000 1.1 +++ test1.xslt 19 Nov 2005 22:21:10 -0000 1.2 @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8" ?> -<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:output encoding="utf-16"/> <xsl:template match="/"> <out xmlns="foo" bar="" baz="a&b" xmlns:foo="http://schemas.microsoft.com/xsd/catalog"> <xsl:comment> @#$$ comment</xsl:comment> |
From: Oleg T. <he...@us...> - 2005-11-19 22:19:19
|
Update of /cvsroot/mvp-xml/Common/v2/test/MvpXslTransformTests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10898/MvpXslTransformTests Log Message: Directory /cvsroot/mvp-xml/Common/v2/test/MvpXslTransformTests added to the repository |
From: Daniel C. \(kzu\) <dca...@us...> - 2005-11-19 15:19:48
|
Update of /cvsroot/mvp-xml/Global In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17868 Modified Files: how-to-sign.txt Log Message: Updated instructions, which have changed for .NET 2.0 Index: how-to-sign.txt =================================================================== RCS file: /cvsroot/mvp-xml/Global/how-to-sign.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- how-to-sign.txt 31 Oct 2005 09:38:26 -0000 1.1 +++ how-to-sign.txt 19 Nov 2005 15:19:38 -0000 1.2 @@ -1,7 +1,11 @@ 1. Open Visual Studio command prompt 2. Sign assembly using .spc and .pvk files: -signcode -spc myCertificate.spc -v myKey.pvk -t http://timestamp.verisign.com/scripts/timstamp.dll Mvp.Xml.dll +.NET v1.1: +signcode -spc xmlmvpcert.spc -v xmlmvpkey.pvk -t http://timestamp.verisign.com/scripts/timstamp.dll Mvp.Xml.dll + +.NET v2.0: +See signtool help. Note: "-t http://timestamp.verisign.com/scripts/timstamp.dll" is an optional. |
From: Oleg T. <he...@us...> - 2005-11-18 21:24:58
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28558/v2/src/Exslt Modified Files: Exslt.csproj Log Message: Index: Exslt.csproj =================================================================== RCS file: /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Exslt.csproj,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Exslt.csproj 18 Nov 2005 20:39:41 -0000 1.5 +++ Exslt.csproj 18 Nov 2005 21:24:46 -0000 1.6 @@ -151,10 +151,11 @@ <Compile Include="MultiOutput\OutputState.cs"> <SubType>Code</SubType> </Compile> - <Compile Include="Xsl\IXmlTransform.cs" /> - <Compile Include="Xsl\MvpXslTransform.cs" /> <Content Include="Makefile" /> </ItemGroup> + <ItemGroup> + <Folder Include="Xsl\" /> + </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <PreBuildEvent> |
From: Oleg T. <he...@us...> - 2005-11-18 21:24:58
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28558/v2/src/Exslt/Xsl Removed Files: MvpXslTransform.cs Log Message: --- MvpXslTransform.cs DELETED --- |
From: Oleg T. <he...@us...> - 2005-11-18 20:55:33
|
Update of /cvsroot/mvp-xml/Common/v2/test/XslReaderTests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22164/v2/test/XslReaderTests Modified Files: XslReaderTests.cs Log Message: Index: XslReaderTests.cs =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/test/XslReaderTests/XslReaderTests.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- XslReaderTests.cs 12 Nov 2005 21:28:59 -0000 1.2 +++ XslReaderTests.cs 18 Nov 2005 20:55:23 -0000 1.3 @@ -54,7 +54,7 @@ byte[] buf = ms.ToArray(); XmlReader standard = XmlReader.Create(new MemoryStream(buf)); XslReader xslReader = new XslReader(xslt, multiThread, bufSize); - xslReader.Transform(new XmlInput(GetReader(Globals.NorthwindResource)), null); + xslReader.StartTransform(new XmlInput(GetReader(Globals.NorthwindResource)), null); CompareReaders(standard, xslReader); } @@ -114,7 +114,7 @@ XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load(XmlReader.Create(new StringReader(copyTransform))); XslReader xslReader = new XslReader(xslt); - xslReader.Transform(new XmlInput(new StringReader(xml)), null); + xslReader.StartTransform(new XmlInput(new StringReader(xml)), null); standard.MoveToContent(); xslReader.MoveToContent(); @@ -137,7 +137,7 @@ XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load(XmlReader.Create(new StringReader(copyTransform))); XslReader xslReader = new XslReader(xslt); - xslReader.Transform(new XmlInput(new StringReader(xml)), null); + xslReader.StartTransform(new XmlInput(new StringReader(xml)), null); while (!xslReader.EOF) { xslReader.Read(); @@ -192,11 +192,11 @@ byte[] buf = ms.ToArray(); XmlReader standard = XmlReader.Create(new MemoryStream(buf)); XslReader xslReader = new XslReader(xslt, true, 16); - xslReader.Transform(new XmlInput(GetReader(Globals.NorthwindResource)), null); + xslReader.StartTransform(new XmlInput(GetReader(Globals.NorthwindResource)), null); xslReader.MoveToContent(); xslReader.Read(); //Now restart it - xslReader.Transform(new XmlInput(GetReader(Globals.NorthwindResource)), null); + xslReader.StartTransform(new XmlInput(GetReader(Globals.NorthwindResource)), null); CompareReaders(standard, xslReader); } |
From: Oleg T. <he...@us...> - 2005-11-18 20:51:38
|
Update of /cvsroot/mvp-xml/Common/v2/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21390/v2/src Modified Files: Common.csproj Log Message: Index: Common.csproj =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/src/Common.csproj,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- Common.csproj 17 Nov 2005 20:42:27 -0000 1.11 +++ Common.csproj 18 Nov 2005 20:51:28 -0000 1.12 @@ -145,6 +145,8 @@ <Compile Include="XPath\XPathVariable.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="Xsl\IXmlTransform.cs" /> + <Compile Include="Xsl\XslReader.cs" /> <Content Include="changelog.txt" /> <EmbeddedResource Include="Serialization\PerfCounterInstaller.resx"> <DependentUpon>PerfCounterInstaller.cs</DependentUpon> |
From: Oleg T. <he...@us...> - 2005-11-18 20:51:38
|
Update of /cvsroot/mvp-xml/Common/v2/src/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21390/v2/src/Xsl Added Files: IXmlTransform.cs XslReader.cs Log Message: --- NEW FILE: IXmlTransform.cs --- #region using using System; using System.IO; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; #endregion namespace Mvp.Xml.Common.Xsl { /// <summary> /// New experimental generic XML transform interface. Defines an API for /// transforming <see cref="XmlInput"/> into <see cref="XmlOutput"/>. /// </summary> public interface IXmlTransform { /// <summary> /// Transforms given <see cref="XmlInput"/> into <see cref="XmlOutput"/>. /// </summary> /// <param name="defaulDocument">Default input XML document</param> /// <param name="args">Parameters</param> /// <param name="output">Represents the transformation's output</param> void Transform(XmlInput defaulDocument, XsltArgumentList args, XmlOutput output); /// <summary> /// Defines default output settings. /// </summary> XmlWriterSettings OutputSettings { get; } } /// <summary> /// XmlInput class represents generic XML input to a trasnformation. The actual /// XML to be transformed can be provided as string URI, <see cref="Stream"/>, /// <see cref="TextReader"/>, <see cref="XmlReader"/> or <see cref="IXPathNavigable"/>. /// Optional <see cref="XmlResolver"/> is used to resolve external references when /// loading input XML document and URIs in a "document()" function calls during /// transformation. /// </summary> public class XmlInput { internal object source ; internal XmlResolver resolver; /// <summary> /// Creates new XmlInput object for an XML document provided as an /// <see cref="XmlReader"/>. Also registers an <see cref="XmlResolver"/> to be used /// for resolving external references in the XML document and document() function. /// </summary> /// <param name="reader">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(XmlReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as a /// <see cref="TextReader"/>. Also registers an <see cref="XmlResolver"/> to be used /// for resolving external references in the XML document and document() function. /// </summary> /// <param name="reader">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(TextReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as a /// <see cref="Stream"/>. Also registers an <see cref="XmlResolver"/> to be used /// for resolving external references in the XML document and document() function. /// </summary> /// <param name="stream">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(Stream stream, XmlResolver resolver) { this.source = stream; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as an URI. /// Also registers an <see cref="XmlResolver"/> to be used /// for resolving external references in the XML document and document() function. /// </summary> /// <param name="uri">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(String uri , XmlResolver resolver) { this.source = uri ; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as an /// <see cref="IXPathNavigable"/>. Also registers an <see cref="XmlResolver"/> to be used /// for resolving document() function. /// </summary> /// <param name="nav">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(IXPathNavigable nav , XmlResolver resolver) { this.source = nav ; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as an /// <see cref="XmlReader"/>. /// </summary> /// <param name="reader">Input XML document</param> public XmlInput(XmlReader reader) : this(reader, new DefaultXmlResolver()) {} /// <summary> /// Creates new XmlInput object for an XML document provided as a /// <see cref="TextReader"/>. /// </summary> /// <param name="reader">Input XML document</param> public XmlInput(TextReader reader) : this(reader, new DefaultXmlResolver()) {} /// <summary> /// Creates new XmlInput object for an XML document provided as a /// <see cref="Stream"/>. /// </summary> /// <param name="stream">Input XML document</param> public XmlInput(Stream stream) : this(stream, new DefaultXmlResolver()) {} /// <summary> /// Creates new XmlInput object for an XML document provided as an URI. /// </summary> /// <param name="uri">Input XML document</param> public XmlInput(String uri ) : this(uri , new DefaultXmlResolver()) {} /// <summary> /// Creates new XmlInput object for an XML document provided as an /// <see cref="IXPathNavigable"/>. /// </summary> /// <param name="nav">Input XML document</param> public XmlInput(IXPathNavigable nav ) : this(nav , new DefaultXmlResolver()) {} // We can add set of implicit constructors. // I am not shre that this will be for good, so I commented them for now. //public static implicit operator XmlInput(XmlReader reader) { return new XmlInput(reader); } //public static implicit operator XmlInput(TextReader reader) { return new XmlInput(reader); } //public static implicit operator XmlInput(Stream stream) { return new XmlInput(stream); } //public static implicit operator XmlInput(String uri ) { return new XmlInput(uri ); } //public static implicit operator XmlInput(XPathNavigator nav ) { return new XmlInput(nav ); } // the trick doesn't work with interfaces } /// <summary> /// XmlOutput class represents generic XML transformation output. An output XML /// can be written to an URI, <see cref="Stream"/>, <see cref="TextWriter"/> or /// <see cref="XmlWriter"/>. /// </summary> public class XmlOutput { internal object destination; /// <summary> /// Creates new XmlOutput object over an <see cref="XmlWriter"/>. /// </summary> /// <param name="writer">An <see cref="XmlWriter"/> to write output to</param> public XmlOutput(XmlWriter writer) { this.destination = writer; } /// <summary> /// Creates new XmlOutput object over a <see cref="TextWriter"/>. /// </summary> /// <param name="writer">A <see cref="TextWriter"/> to write output to</param> public XmlOutput(TextWriter writer) { this.destination = writer; } /// <summary> /// Creates new XmlOutput object over a <see cref="Stream"/>. /// </summary> /// <param name="stream">A <see cref="Stream"/> to write output to</param> public XmlOutput(Stream stream ) { this.destination = stream ; } /// <summary> /// Creates new XmlOutput object over an URI. /// </summary> /// <param name="uri">An URI to write output to</param> public XmlOutput(String uri ) { this.destination = uri ; } // We will add overrides with XmlOutputResolver here later to support multiple output documents (<xsl:result-document>) } /// <summary> /// XmlUrlResolver wrapper allowing us to recognize the case when no /// XmlResolver was passed. /// </summary> internal class DefaultXmlResolver : XmlUrlResolver { public DefaultXmlResolver() : base() {} } } --- NEW FILE: XslReader.cs --- #region using using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; using System.Diagnostics; using System.Threading; #endregion namespace Mvp.Xml.Common.Xsl { /// <summary> /// <para>XslReader provides an efficient way to read results of an XSL /// transformation via an <see cref="XmlReader"/> API. Due to /// architectural and performance reasons the <see cref="XslCompiledTransform"/> /// class doesn't support transforming to an <see cref="XmlReader"/> as obsolete [...1065 lines suppressed...] } } public override void Close() { Write(XmlNodeType.None, null, null); lock (this) { Monitor.Pulse(this); } } public override void GetToken(int attNum, out QName name, out string value) { Debug.Assert(0 <= attNum && attNum < readEndPos - readStartPos - 1); XmlNodeType nodeType; XmlToken.Get(ref buffer[(readStartPos + attNum) & mask], out nodeType, out name, out value); Debug.Assert(nodeType == (attNum == 0 ? XmlNodeType.Element : XmlNodeType.Attribute), "We use GetToken() only to access parts of start element tag."); } } #endregion ------------------------------- Supporting classes ------------------------------ } } |
From: Oleg T. <he...@us...> - 2005-11-18 20:48:51
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20531/v2/src/Exslt/Xsl Removed Files: IXmlTransform.cs Log Message: --- IXmlTransform.cs DELETED --- |
From: Oleg T. <he...@us...> - 2005-11-18 20:39:48
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18662/v2/src/Exslt Modified Files: Exslt.csproj Log Message: Index: Exslt.csproj =================================================================== RCS file: /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Exslt.csproj,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Exslt.csproj 17 Nov 2005 21:52:48 -0000 1.4 +++ Exslt.csproj 18 Nov 2005 20:39:41 -0000 1.5 @@ -153,7 +153,6 @@ </Compile> <Compile Include="Xsl\IXmlTransform.cs" /> <Compile Include="Xsl\MvpXslTransform.cs" /> - <Compile Include="Xsl\XslReader.cs" /> <Content Include="Makefile" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> |
From: Oleg T. <he...@us...> - 2005-11-18 20:38:45
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18428/v2/src/Exslt/Xsl Removed Files: XslReader.cs Log Message: --- XslReader.cs DELETED --- |
From: Oleg T. <he...@us...> - 2005-11-17 21:57:00
|
Update of /cvsroot/mvp-xml/Global/v2/EXSLT/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23594/v2/EXSLT/Xsl Added Files: .cvsignore Log Message: --- NEW FILE: .cvsignore --- bin obj *.user *.suo |
From: Oleg T. <he...@us...> - 2005-11-17 21:57:00
|
Update of /cvsroot/mvp-xml/Global/v2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23594/v2 Modified Files: Global.csproj Log Message: Index: Global.csproj =================================================================== RCS file: /cvsroot/mvp-xml/Global/v2/Global.csproj,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Global.csproj 30 Oct 2005 13:55:53 -0000 1.1 +++ Global.csproj 17 Nov 2005 21:56:51 -0000 1.2 @@ -174,6 +174,15 @@ <Compile Include="..\..\EXSLT\v2\src\Exslt\MultiOutput\OutputState.cs"> <Link>EXSLT\MultiOutput\OutputState.cs</Link> </Compile> + <Compile Include="..\..\EXSLT\v2\src\Exslt\Xsl\IXmlTransform.cs"> + <Link>EXSLT\Xsl\IXmlTransform.cs</Link> + </Compile> + <Compile Include="..\..\EXSLT\v2\src\Exslt\Xsl\MvpXslTransform.cs"> + <Link>EXSLT\Xsl\MvpXslTransform.cs</Link> + </Compile> + <Compile Include="..\..\EXSLT\v2\src\Exslt\Xsl\XslReader.cs"> + <Link>EXSLT\Xsl\XslReader.cs</Link> + </Compile> <Compile Include="..\..\XInclude\v2\src\SR.cs"> <Link>XInclude\SR.cs</Link> </Compile> @@ -248,6 +257,7 @@ <None Include="Common\XPath\.cvsignore" /> <None Include="EXSLT\.cvsignore" /> <None Include="EXSLT\MultiOutput\.cvsignore" /> + <None Include="EXSLT\Xsl\.cvsignore" /> <None Include="XInclude\.cvsignore" /> <None Include="XPointer\.cvsignore" /> </ItemGroup> |
From: Oleg T. <he...@us...> - 2005-11-17 21:56:06
|
Update of /cvsroot/mvp-xml/Global/v2/EXSLT/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23411/Xsl Log Message: Directory /cvsroot/mvp-xml/Global/v2/EXSLT/Xsl added to the repository |
From: Oleg T. <he...@us...> - 2005-11-17 21:53:00
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22424/v2/src/Exslt/Xsl Added Files: IXmlTransform.cs MvpXslTransform.cs XslReader.cs Log Message: --- NEW FILE: IXmlTransform.cs --- #region using using System; using System.IO; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; #endregion namespace Mvp.Xml.Common.Xsl { /// <summary> /// New experimental generic XML transform interface. Defines an API for /// transforming <see cref="XmlInput"/> into <see cref="XmlOutput"/>. /// </summary> public interface IXmlTransform { /// <summary> /// Transforms given <see cref="XmlInput"/> into <see cref="XmlOutput"/>. /// </summary> /// <param name="defaulDocument">Default input XML document</param> /// <param name="args">Parameters</param> /// <param name="output">Represents the transformation's output</param> void Transform(XmlInput defaulDocument, XsltArgumentList args, XmlOutput output); /// <summary> /// Defines default output settings. /// </summary> XmlWriterSettings OutputSettings { get; } } /// <summary> /// XmlInput class represents generic XML input to a trasnformation. The actual /// XML to be transformed can be provided as string URI, <see cref="Stream"/>, /// <see cref="TextReader"/>, <see cref="XmlReader"/> or <see cref="IXPathNavigable"/>. /// Optional <see cref="XmlResolver"/> is used to resolve external references when /// loading input XML document and URIs in a "document()" function calls during /// transformation. /// </summary> public class XmlInput { internal object source ; internal XmlResolver resolver; /// <summary> /// Creates new XmlInput object for an XML document provided as an /// <see cref="XmlReader"/>. Also registers an <see cref="XmlResolver"/> to be used /// for resolving external references in the XML document and document() function. /// </summary> /// <param name="reader">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(XmlReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as a /// <see cref="TextReader"/>. Also registers an <see cref="XmlResolver"/> to be used /// for resolving external references in the XML document and document() function. /// </summary> /// <param name="reader">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(TextReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as a /// <see cref="Stream"/>. Also registers an <see cref="XmlResolver"/> to be used /// for resolving external references in the XML document and document() function. /// </summary> /// <param name="stream">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(Stream stream, XmlResolver resolver) { this.source = stream; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as an URI. /// Also registers an <see cref="XmlResolver"/> to be used /// for resolving external references in the XML document and document() function. /// </summary> /// <param name="uri">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(String uri , XmlResolver resolver) { this.source = uri ; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as an /// <see cref="IXPathNavigable"/>. Also registers an <see cref="XmlResolver"/> to be used /// for resolving document() function. /// </summary> /// <param name="nav">Input XML document</param> /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(IXPathNavigable nav , XmlResolver resolver) { this.source = nav ; this.resolver = resolver; } /// <summary> /// Creates new XmlInput object for an XML document provided as an /// <see cref="XmlReader"/>. /// </summary> /// <param name="reader">Input XML document</param> public XmlInput(XmlReader reader) : this(reader, new DefaultXmlResolver()) {} /// <summary> /// Creates new XmlInput object for an XML document provided as a /// <see cref="TextReader"/>. /// </summary> /// <param name="reader">Input XML document</param> public XmlInput(TextReader reader) : this(reader, new DefaultXmlResolver()) {} /// <summary> /// Creates new XmlInput object for an XML document provided as a /// <see cref="Stream"/>. /// </summary> /// <param name="stream">Input XML document</param> public XmlInput(Stream stream) : this(stream, new DefaultXmlResolver()) {} /// <summary> /// Creates new XmlInput object for an XML document provided as an URI. /// </summary> /// <param name="uri">Input XML document</param> public XmlInput(String uri ) : this(uri , new DefaultXmlResolver()) {} /// <summary> /// Creates new XmlInput object for an XML document provided as an /// <see cref="IXPathNavigable"/>. /// </summary> /// <param name="nav">Input XML document</param> public XmlInput(IXPathNavigable nav ) : this(nav , new DefaultXmlResolver()) {} // We can add set of implicit constructors. // I am not shre that this will be for good, so I commented them for now. //public static implicit operator XmlInput(XmlReader reader) { return new XmlInput(reader); } //public static implicit operator XmlInput(TextReader reader) { return new XmlInput(reader); } //public static implicit operator XmlInput(Stream stream) { return new XmlInput(stream); } //public static implicit operator XmlInput(String uri ) { return new XmlInput(uri ); } //public static implicit operator XmlInput(XPathNavigator nav ) { return new XmlInput(nav ); } // the trick doesn't work with interfaces } /// <summary> /// XmlOutput class represents generic XML transformation output. An output XML /// can be written to an URI, <see cref="Stream"/>, <see cref="TextWriter"/> or /// <see cref="XmlWriter"/>. /// </summary> public class XmlOutput { internal object destination; /// <summary> /// Creates new XmlOutput object over an <see cref="XmlWriter"/>. /// </summary> /// <param name="writer">An <see cref="XmlWriter"/> to write output to</param> public XmlOutput(XmlWriter writer) { this.destination = writer; } /// <summary> /// Creates new XmlOutput object over a <see cref="TextWriter"/>. /// </summary> /// <param name="writer">A <see cref="TextWriter"/> to write output to</param> public XmlOutput(TextWriter writer) { this.destination = writer; } /// <summary> /// Creates new XmlOutput object over a <see cref="Stream"/>. /// </summary> /// <param name="stream">A <see cref="Stream"/> to write output to</param> public XmlOutput(Stream stream ) { this.destination = stream ; } /// <summary> /// Creates new XmlOutput object over an URI. /// </summary> /// <param name="uri">An URI to write output to</param> public XmlOutput(String uri ) { this.destination = uri ; } // We will add overrides with XmlOutputResolver here later to support multiple output documents (<xsl:result-document>) } /// <summary> /// XmlUrlResolver wrapper allowing us to recognize the case when no /// XmlResolver was passed. /// </summary> internal class DefaultXmlResolver : XmlUrlResolver { public DefaultXmlResolver() : base() {} } } --- NEW FILE: MvpXslTransform.cs --- #region using using System; using System.IO; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; using System.Reflection; using System.CodeDom.Compiler; using Mvp.Xml.Exslt; #endregion namespace Mvp.Xml.Common.Xsl { /// <summary> /// <para>MvpXslTransform class extends capabilities of the <see cref="XslCompiledTransform"/> /// class by adding support for transforming into <see cref="XmlReader"/>, /// vast collection of EXSLT extention functions, multiple outputs and /// transforming of <see cref="IXPathNavigable"/> along with <see cref="XmlResolver"/>. /// Also MvpXslTransform class provides new clean experimental XSL transformation API /// by introducing concepts of <see cref="IXmlTransform"/> interface, <see cref="XmlInput"/> /// and <see cref="XmlOutput"/>.</para> /// </summary> /// <remarks><para>MvpXslTransform class is thread-safe for Transorm() methods. I.e. /// once MvpXslTransform object is loaded, you can safely call its Transform() methods /// in multiple threads simultaneously.</para> /// <para>MvpXslTransform supports EXSLT extension functions from the following namespaces: /// * http://exslt.org/common /// * http://exslt.org/dates-and-times /// * http://exslt.org/math /// * http://exslt.org/random /// * http://exslt.org/regular-expressions /// * http://exslt.org/sets /// * http://exslt.org/strings /// * http://gotdotnet.com/exslt/dates-and-times /// * http://gotdotnet.com/exslt/math /// * http://gotdotnet.com/exslt/regular-expressions /// * http://gotdotnet.com/exslt/sets /// * http://gotdotnet.com/exslt/strings /// * http://gotdotnet.com/exslt/dynamic</para> /// <para>Multioutput (<exsl:document> element) is turned off by default and can /// be turned on using MultiOutput property. Note, that multioutput is not supported /// when transfomation is done to <see cref="XmlWriter"/> or <see cref="XmlReader"/>.</para> /// <para>MvpXslTransform uses XSLT extension objects and reflection and so using /// it requires FullTrust security level.</para> /// </remarks> public class MvpXslTransform : IXmlTransform { private XslCompiledTransform compiledTransform; private object sync = new object(); private ExsltFunctionNamespace supportedFunctions = ExsltFunctionNamespace.All; private bool multiOutput; #region ctors /// <summary> /// Initializes a new instance of the MvpXslTransform class. /// </summary> public MvpXslTransform() { this.compiledTransform = new XslCompiledTransform(); } /// <summary> /// Initializes a new instance of the MvpXslTransform /// class with the specified debug setting. /// </summary> public MvpXslTransform(bool debug) { this.compiledTransform = new XslCompiledTransform(debug); } #endregion #region Load() method overloads /// <summary> Loads the XSLT stylesheet contained in the IXPathNavigable</summary> public void Load(IXPathNavigable ixn) { this.compiledTransform.Load(ixn); } /// <summary> Loads the XSLT stylesheet specified by a URI</summary> public void Load(string stylesheetUri) { this.compiledTransform.Load(stylesheetUri); } /// <summary> Loads the XSLT stylesheet contained in the XmlReader</summary> public void Load(XmlReader reader) { this.compiledTransform.Load(reader); } /// <summary> /// Compiles the XSLT style sheet contained in the IXPathNavigable. /// The XmlResolver resolves any XSLT import or include elements and the /// XSLT settings determine the permissions for the style sheet. /// </summary> public void Load(IXPathNavigable stylesheet, XsltSettings settings, XmlResolver stylesheetResolver) { this.compiledTransform.Load(stylesheet, settings, stylesheetResolver); } /// <summary> /// Loads and compiles the XSLT style sheet specified by the URI. /// The XmlResolver resolves any XSLT import or include elements and the /// XSLT settings determine the permissions for the style sheet. /// </summary> public void Load(string stylesheetUri, XsltSettings settings, XmlResolver stylesheetResolver) { this.compiledTransform.Load(stylesheetUri, settings, stylesheetResolver); } /// <summary> /// Compiles the XSLT style sheet contained in the XmlReader. /// The XmlResolver resolves any XSLT import or include elements and the /// XSLT settings determine the permissions for the style sheet. /// </summary> public void Load(XmlReader stylesheet, XsltSettings settings, XmlResolver stylesheetResolver) { this.compiledTransform.Load(stylesheet, settings, stylesheetResolver); } #endregion #region public properties /// <summary> /// Bitwise enumeration used to specify which EXSLT functions should be accessible to /// the MvpXslTransform object. The default value is ExsltFunctionNamespace.All /// </summary> public ExsltFunctionNamespace SupportedFunctions { set { if (Enum.IsDefined(typeof(ExsltFunctionNamespace), value)) supportedFunctions = value; } get { return supportedFunctions; } } /// <summary> /// Boolean flag used to specify whether multiple output (via exsl:document) is /// supported. /// Note: This property is ignored (hence multiple output is not supported) when /// transformation is done to XmlReader or XmlWriter (use overloaded method, /// which transforms to MultiXmlTextWriter instead). /// Note: Because of some restrictions and slight overhead this feature is /// disabled by default. If you need multiple output support, set this property to /// true before the Transform() call. /// </summary> public bool MultiOutput { get { return multiOutput; } set { multiOutput = value; } } /// <summary> /// Gets the TempFileCollection that contains the temporary files generated /// on disk after a successful call to the Load method. /// </summary> public TempFileCollection TemporaryFiles { get { return this.compiledTransform.TemporaryFiles; } } #endregion #region IXmlTransform impl /// <summary> /// Transforms given <see cref="XmlInput"/> into <see cref="XmlOutput"/>. /// </summary> /// <param name="defaulDocument">Default input XML document</param> /// <param name="args">Parameters</param> /// <param name="output">Represents the transformation's output</param> public void Transform(XmlInput defaultDocument, XsltArgumentList args, XmlOutput output) { if (defaultDocument == null) throw new ArgumentNullException("defaltDocument"); XmlWriter xmlWriter = output.destination as XmlWriter; bool closeWriter = false; if (xmlWriter == null) { closeWriter = true; while (true) { TextWriter txtWriter = output.destination as TextWriter; if (txtWriter != null) { if (multiOutput) { xmlWriter = new MultiXmlTextWriter(txtWriter); } else { xmlWriter = XmlWriter.Create(txtWriter, this.compiledTransform.OutputSettings); } break; } Stream strm = output.destination as Stream; if (strm != null) { if (multiOutput) { xmlWriter = new MultiXmlTextWriter(strm, this.compiledTransform.OutputSettings.Encoding); } else { xmlWriter = XmlWriter.Create(strm, this.compiledTransform.OutputSettings); } break; } String str = output.destination as String; if (str != null) { if (multiOutput) { xmlWriter = new MultiXmlTextWriter(str, this.compiledTransform.OutputSettings.Encoding); } else { // BugBug: We should read doc before creating output file in case they are the same xmlWriter = XmlWriter.Create(str, this.compiledTransform.OutputSettings); } break; } throw new Exception("Unexpected XmlOutput"); } } try { TransformToWriter(defaultDocument, args, xmlWriter); } finally { if (closeWriter) { xmlWriter.Close(); } } } /// <summary> /// Gets an <see cref="XmlWriterSettings"/> object that contains the output /// information derived from the xsl:output element of the style sheet. /// </summary> public XmlWriterSettings OutputSettings { get { if (this.compiledTransform != null) { return this.compiledTransform.OutputSettings; } else { return new XmlWriterSettings(); } } } #endregion #region additional Transform() methods /// <summary> /// Transforms given <see cref="XmlInput"/> into <see cref="XmlReader"/>. /// </summary> /// <param name="defaulDocument">Default input XML document</param> /// <param name="args">Parameters</param> public XmlReader Transform(XmlInput defaultDocument, XsltArgumentList args) { XslReader r = new XslReader(this.compiledTransform); r.StartTransform(defaultDocument, AddExsltExtensionObjects(args)); return r; } #endregion #region private stuff private static XmlReaderSettings DefaultReaderSettings; static MvpXslTransform() { DefaultReaderSettings = new XmlReaderSettings(); DefaultReaderSettings.ProhibitDtd = false; } private XmlReaderSettings GetReaderSettings(XmlInput defaultDocument) { if (defaultDocument.resolver is DefaultXmlResolver) { return DefaultReaderSettings; } else { XmlReaderSettings settings = DefaultReaderSettings.Clone(); settings.XmlResolver = defaultDocument.resolver; return settings; } } private void TransformToWriter(XmlInput defaultDocument, XsltArgumentList xsltArgs, XmlWriter xmlWriter) { XsltArgumentList args = AddExsltExtensionObjects(xsltArgs); XmlReader xmlReader = defaultDocument.source as XmlReader; if (xmlReader != null) { this.compiledTransform.Transform(xmlReader, args, xmlWriter, defaultDocument.resolver); return; } IXPathNavigable nav = defaultDocument.source as IXPathNavigable; if (nav != null) { if (defaultDocument.resolver is DefaultXmlResolver) { this.compiledTransform.Transform(nav, args, xmlWriter); } else { TransformIXPathNavigable(nav, args, xmlWriter, defaultDocument.resolver); } return; } string str = defaultDocument.source as string; if (str != null) { using (XmlReader reader = XmlReader.Create(str, GetReaderSettings(defaultDocument))) { this.compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; } Stream strm = defaultDocument.source as Stream; if (strm != null) { using (XmlReader reader = XmlReader.Create(strm, GetReaderSettings(defaultDocument))) { this.compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; } TextReader txtReader = defaultDocument.source as TextReader; if (txtReader != null) { using (XmlReader reader = XmlReader.Create(txtReader, GetReaderSettings(defaultDocument))) { this.compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; } throw new Exception("Unexpected XmlInput"); } private void TransformIXPathNavigable(IXPathNavigable nav, XsltArgumentList args, XmlWriter xmlWriter, XmlResolver resolver) { object command = this.compiledTransform.GetType().GetField( "command", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this.compiledTransform); MethodInfo executeMethod = command.GetType().GetMethod("Execute", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(IXPathNavigable), typeof(XmlResolver), typeof(XsltArgumentList), typeof(XmlWriter) }, null); executeMethod.Invoke(this.compiledTransform, new object[] { nav, resolver, AddExsltExtensionObjects(args), xmlWriter }); } /// <summary> /// Adds the objects that implement the EXSLT extensions to the provided argument /// list. The extension objects added depend on the value of the SupportedFunctions /// property. /// </summary> /// <param name="list">The argument list</param> /// <returns>An XsltArgumentList containing the contents of the list passed in /// and objects that implement the EXSLT. </returns> /// <remarks>If null is passed in then a new XsltArgumentList is constructed. </remarks> private XsltArgumentList AddExsltExtensionObjects(XsltArgumentList list) { if (list == null) { list = new XsltArgumentList(); } lock (sync) { //remove all our extension objects in case the XSLT argument list is being reused list.RemoveExtensionObject(ExsltNamespaces.Math); list.RemoveExtensionObject(ExsltNamespaces.Random); list.RemoveExtensionObject(ExsltNamespaces.DatesAndTimes); list.RemoveExtensionObject(ExsltNamespaces.RegularExpressions); list.RemoveExtensionObject(ExsltNamespaces.Strings); list.RemoveExtensionObject(ExsltNamespaces.Sets); list.RemoveExtensionObject(ExsltNamespaces.GDNDatesAndTimes); list.RemoveExtensionObject(ExsltNamespaces.GDNMath); list.RemoveExtensionObject(ExsltNamespaces.GDNRegularExpressions); list.RemoveExtensionObject(ExsltNamespaces.GDNSets); list.RemoveExtensionObject(ExsltNamespaces.GDNStrings); list.RemoveExtensionObject(ExsltNamespaces.GDNDynamic); //add extension objects as specified by SupportedFunctions if ((this.SupportedFunctions & ExsltFunctionNamespace.Math) > 0) { list.AddExtensionObject(ExsltNamespaces.Math, new ExsltMath()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.Random) > 0) { list.AddExtensionObject(ExsltNamespaces.Random, new ExsltRandom()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.DatesAndTimes) > 0) { list.AddExtensionObject(ExsltNamespaces.DatesAndTimes, new ExsltDatesAndTimes()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.RegularExpressions) > 0) { list.AddExtensionObject(ExsltNamespaces.RegularExpressions, new ExsltRegularExpressions()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.Strings) > 0) { list.AddExtensionObject(ExsltNamespaces.Strings, new ExsltStrings()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.Sets) > 0) { list.AddExtensionObject(ExsltNamespaces.Sets, new ExsltSets()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.GDNDatesAndTimes) > 0) { list.AddExtensionObject(ExsltNamespaces.GDNDatesAndTimes, new GDNDatesAndTimes()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.GDNMath) > 0) { list.AddExtensionObject(ExsltNamespaces.GDNMath, new GDNMath()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.GDNRegularExpressions) > 0) { list.AddExtensionObject(ExsltNamespaces.GDNRegularExpressions, new GDNRegularExpressions()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.GDNSets) > 0) { list.AddExtensionObject(ExsltNamespaces.GDNSets, new GDNSets()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.GDNStrings) > 0) { list.AddExtensionObject(ExsltNamespaces.GDNStrings, new GDNStrings()); } if ((this.SupportedFunctions & ExsltFunctionNamespace.GDNDynamic) > 0) { list.AddExtensionObject(ExsltNamespaces.GDNDynamic, new GDNDynamic()); } } return list; } #endregion } } --- NEW FILE: XslReader.cs --- #region using using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; using System.Diagnostics; using System.Threading; #endregion namespace Mvp.Xml.Common.Xsl { /// <summary> /// <para>XslReader provides an efficient way to read results of an XSL /// transformation via an <see cref="XmlReader"/> API. Due to /// architectural and performance reasons the <see cref="XslCompiledTransform"/> /// class doesn't support transforming to an <see cref="XmlReader"/> as obsolete [...1065 lines suppressed...] } } public override void Close() { Write(XmlNodeType.None, null, null); lock (this) { Monitor.Pulse(this); } } public override void GetToken(int attNum, out QName name, out string value) { Debug.Assert(0 <= attNum && attNum < readEndPos - readStartPos - 1); XmlNodeType nodeType; XmlToken.Get(ref buffer[(readStartPos + attNum) & mask], out nodeType, out name, out value); Debug.Assert(nodeType == (attNum == 0 ? XmlNodeType.Element : XmlNodeType.Attribute), "We use GetToken() only to access parts of start element tag."); } } #endregion ------------------------------- Supporting classes ------------------------------ } } |
From: Oleg T. <he...@us...> - 2005-11-17 21:52:59
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22424/v2/src/Exslt Modified Files: .cvsignore Exslt.csproj Log Message: Index: .cvsignore =================================================================== RCS file: /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- .cvsignore 16 Oct 2005 20:07:08 -0000 1.1 +++ .cvsignore 17 Nov 2005 21:52:48 -0000 1.2 @@ -2,4 +2,6 @@ obj *.user *.suo -*.vspscc \ No newline at end of file +*.vspscc +*.pdb +*.dll \ No newline at end of file Index: Exslt.csproj =================================================================== RCS file: /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Exslt.csproj,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- Exslt.csproj 30 Oct 2005 13:50:54 -0000 1.3 +++ Exslt.csproj 17 Nov 2005 21:52:48 -0000 1.4 @@ -151,6 +151,9 @@ <Compile Include="MultiOutput\OutputState.cs"> <SubType>Code</SubType> </Compile> + <Compile Include="Xsl\IXmlTransform.cs" /> + <Compile Include="Xsl\MvpXslTransform.cs" /> + <Compile Include="Xsl\XslReader.cs" /> <Content Include="Makefile" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> |
From: Oleg T. <he...@us...> - 2005-11-17 21:51:37
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22122/Xsl Log Message: Directory /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/Xsl added to the repository |
From: Oleg T. <he...@us...> - 2005-11-17 20:44:27
|
Update of /cvsroot/mvp-xml/Common/v2/src/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4406/v2/src/Xsl Removed Files: IXmlTransform.cs MvpXslTransform.cs XslReader.cs Log Message: --- IXmlTransform.cs DELETED --- --- MvpXslTransform.cs DELETED --- --- XslReader.cs DELETED --- |
From: Oleg T. <he...@us...> - 2005-11-17 20:42:37
|
Update of /cvsroot/mvp-xml/Common/v2/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3927/v2/src Modified Files: Common.csproj Log Message: Index: Common.csproj =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/src/Common.csproj,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- Common.csproj 12 Nov 2005 21:28:59 -0000 1.10 +++ Common.csproj 17 Nov 2005 20:42:27 -0000 1.11 @@ -145,9 +145,6 @@ <Compile Include="XPath\XPathVariable.cs"> <SubType>Code</SubType> </Compile> - <Compile Include="Xsl\IXmlTransform.cs" /> - <Compile Include="Xsl\MvpXslTransform.cs" /> - <Compile Include="Xsl\XslReader.cs" /> <Content Include="changelog.txt" /> <EmbeddedResource Include="Serialization\PerfCounterInstaller.resx"> <DependentUpon>PerfCounterInstaller.cs</DependentUpon> |
From: Oleg T. <he...@us...> - 2005-11-17 08:47:17
|
Update of /cvsroot/mvp-xml/EXSLT/v1/src/Exslt In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5188/v1/src/Exslt Modified Files: ExsltDatesAndTimes.cs Log Message: Index: ExsltDatesAndTimes.cs =================================================================== RCS file: /cvsroot/mvp-xml/EXSLT/v1/src/Exslt/ExsltDatesAndTimes.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ExsltDatesAndTimes.cs 20 Jul 2005 20:15:47 -0000 1.2 +++ ExsltDatesAndTimes.cs 17 Nov 2005 08:47:06 -0000 1.3 @@ -11,2164 +11,2350 @@ namespace Mvp.Xml.Exslt { - /// <summary> - /// This class implements the EXSLT functions in the http://exslt.org/dates-and-times namespace. - /// </summary> - public class ExsltDatesAndTimes - { - private CultureInfo ci = new CultureInfo("en-US"); + /// <summary> + /// This class implements the EXSLT functions in the http://exslt.org/dates-and-times namespace. [...4272 lines suppressed...] - /// </summary> - /// <param name="seconds"></param> - /// <returns></returns> - public string duration(double seconds) - { - return XmlConvert.ToString(new TimeSpan(0,0,(int)seconds)); - } - } + /// <summary> + /// Implements the following function + /// string date:duration(number) + /// </summary> + /// <param name="seconds"></param> + /// <returns></returns> + public string duration(double seconds) + { + return XmlConvert.ToString(TimeSpan.FromSeconds(seconds)); + } + } } |
From: Oleg T. <he...@us...> - 2005-11-17 08:47:17
|
Update of /cvsroot/mvp-xml/EXSLT/v2/src/Exslt In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5188/v2/src/Exslt Modified Files: ExsltDatesAndTimes.cs Log Message: Index: ExsltDatesAndTimes.cs =================================================================== RCS file: /cvsroot/mvp-xml/EXSLT/v2/src/Exslt/ExsltDatesAndTimes.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- ExsltDatesAndTimes.cs 7 Nov 2005 16:17:13 -0000 1.4 +++ ExsltDatesAndTimes.cs 17 Nov 2005 08:47:06 -0000 1.5 @@ -2258,7 +2258,7 @@ private double seconds(ExsltDateTime d) { DateTime epoch = new DateTime(1970, 1, 1, 0,0,0,0, CultureInfo.InvariantCulture.Calendar); - return (int)d.ToUniversalTime().Subtract(epoch).TotalSeconds; + return d.ToUniversalTime().Subtract(epoch).TotalSeconds; } /// <summary> @@ -2348,7 +2348,7 @@ /// <returns></returns> public string duration(double seconds) { - return XmlConvert.ToString(new TimeSpan(0,0,(int)seconds)); + return XmlConvert.ToString(TimeSpan.FromSeconds(seconds)); } } } |
From: Oleg T. <he...@us...> - 2005-11-17 08:47:17
|
Update of /cvsroot/mvp-xml/EXSLT/v1/test/ExsltTest/tests/EXSLT/DatesAndTimes In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5188/v1/test/ExsltTest/tests/EXSLT/DatesAndTimes Modified Files: duration.xslt Log Message: Index: duration.xslt =================================================================== RCS file: /cvsroot/mvp-xml/EXSLT/v1/test/ExsltTest/tests/EXSLT/DatesAndTimes/duration.xslt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- duration.xslt 19 Jul 2005 19:47:19 -0000 1.1 +++ duration.xslt 17 Nov 2005 08:47:06 -0000 1.2 @@ -21,10 +21,7 @@ </test5> <test6> <xsl:value-of select="date:duration(-7776000)"/> - </test6> - <test7> - <xsl:value-of select="date:duration(11 div 0)"/> - </test7> + </test6> <test8> <xsl:value-of select="date:duration(0)"/> </test8> |
From: Oleg T. <he...@us...> - 2005-11-17 08:47:17
|
Update of /cvsroot/mvp-xml/EXSLT/v1/test/ExsltTest/results/EXSLT/DatesAndTimes In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5188/v1/test/ExsltTest/results/EXSLT/DatesAndTimes Modified Files: duration.xml Log Message: Index: duration.xml =================================================================== RCS file: /cvsroot/mvp-xml/EXSLT/v1/test/ExsltTest/results/EXSLT/DatesAndTimes/duration.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- duration.xml 19 Jul 2005 19:47:00 -0000 1.1 +++ duration.xml 17 Nov 2005 08:47:06 -0000 1.2 @@ -5,6 +5,5 @@ <test4>P730D</test4> <test5>P90D</test5> <test6>-P90D</test6> - <test7>PT0S</test7> <test8>PT0S</test8> </out> \ No newline at end of file |
From: Oleg T. <he...@us...> - 2005-11-16 21:51:18
|
Update of /cvsroot/mvp-xml/Common/v2/src/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5998/v2/src/Xsl Modified Files: IXmlTransform.cs MvpXslTransform.cs Log Message: Index: MvpXslTransform.cs =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/src/Xsl/MvpXslTransform.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- MvpXslTransform.cs 15 Nov 2005 22:17:25 -0000 1.3 +++ MvpXslTransform.cs 16 Nov 2005 21:51:10 -0000 1.4 @@ -10,41 +10,43 @@ namespace Mvp.Xml.Common.Xsl { public class MvpXslTransform : IXmlTransform { - XslCompiledTransform compiledTransform; + private XslCompiledTransform compiledTransform; public MvpXslTransform(XslCompiledTransform transform) { if (transform == null) throw new ArgumentNullException("transform"); this.compiledTransform = transform; } - public virtual void Transform(XmlInput defaultDocument, XsltArgumentList args, XmlOutput output) { + public void Transform(XmlInput defaultDocument, XsltArgumentList args, XmlOutput output) { + if (defaultDocument == null) throw new ArgumentNullException("defaltDocument"); XmlWriter xmlWriter = output.destination as XmlWriter; bool closeWriter = false; if (xmlWriter == null) { closeWriter = true; - - TextWriter txtWriter = output.destination as TextWriter; - if (txtWriter != null) - { - xmlWriter = XmlWriter.Create(txtWriter, this.compiledTransform.OutputSettings); - break; - } - Stream strm = output.destination as Stream; - if (strm != null) - { - xmlWriter = XmlWriter.Create(strm, this.compiledTransform.OutputSettings); - break; - } - String str = output.destination as String; - if (str != null) + while (true) { - // BugBug: We should read doc before creating output file in case they are the same - xmlWriter = XmlWriter.Create(str, this.compiledTransform.OutputSettings); - break; + TextWriter txtWriter = output.destination as TextWriter; + if (txtWriter != null) + { + xmlWriter = XmlWriter.Create(txtWriter, this.compiledTransform.OutputSettings); + break; + } + Stream strm = output.destination as Stream; + if (strm != null) + { + xmlWriter = XmlWriter.Create(strm, this.compiledTransform.OutputSettings); + break; + } + String str = output.destination as String; + if (str != null) + { + // BugBug: We should read doc before creating output file in case they are the same + xmlWriter = XmlWriter.Create(str, this.compiledTransform.OutputSettings); + break; + } + throw new Exception("Unexpected XmlOutput"); } - throw new Exception("Unexpected XmlOutput"); - } try { TransformToWriter(defaultDocument, args, xmlWriter); @@ -55,10 +57,31 @@ } } - private static XmlReaderSettings ReaderSettings; + public XmlReader Transform(XmlInput defaultDocument, XsltArgumentList args) + { + XslReader r = new XslReader(compiledTransform); + r.StartTransform(defaultDocument, args); + return r; + } + + private static XmlReaderSettings DefaultReaderSettings; static MvpXslTransform() { - ReaderSettings = new XmlReaderSettings(); - ReaderSettings.ProhibitDtd = true; + DefaultReaderSettings = new XmlReaderSettings(); + DefaultReaderSettings.ProhibitDtd = false; + } + + private XmlReaderSettings GetReaderSettings(XmlInput defaultDocument) + { + if (defaultDocument.resolver is DefaultXmlResolver) + { + return DefaultReaderSettings; + } + else + { + XmlReaderSettings settings = DefaultReaderSettings.Clone(); + settings.XmlResolver = defaultDocument.resolver; + return settings; + } } private void TransformToWriter(XmlInput defaultDocument, XsltArgumentList args, XmlWriter xmlWriter) { @@ -70,26 +93,35 @@ IXPathNavigable nav = defaultDocument.source as IXPathNavigable; if (nav != null) { - TransformIXPathNavigable(nav, args, xmlWriter, defaultDocument.resolver); + if (defaultDocument.resolver is DefaultXmlResolver) + { + compiledTransform.Transform(nav, args, xmlWriter); + } + else + { + TransformIXPathNavigable(nav, args, xmlWriter, defaultDocument.resolver); + } return; - } + } string str = defaultDocument.source as string; - if (str != null) { - using (XmlReader reader = XmlReader.Create(str, ReaderSettings)) { + if (str != null) { + using (XmlReader reader = XmlReader.Create(str, GetReaderSettings(defaultDocument))) { compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; } Stream strm = defaultDocument.source as Stream; if (strm != null) { - using (XmlReader reader = XmlReader.Create(strm, ReaderSettings)) { + using (XmlReader reader = XmlReader.Create(strm, GetReaderSettings(defaultDocument))) + { compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; } TextReader txtReader = defaultDocument.source as TextReader; if (txtReader != null) { - using (XmlReader reader = XmlReader.Create(txtReader, ReaderSettings)) { + using (XmlReader reader = XmlReader.Create(txtReader, GetReaderSettings(defaultDocument))) + { compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; @@ -99,11 +131,15 @@ private void TransformIXPathNavigable(IXPathNavigable nav, XsltArgumentList args, XmlWriter xmlWriter, XmlResolver resolver) { - compiledTransform.GetType().GetMethod( - compiledTransform.Transform(nav, args, xmlWriter); + object command = compiledTransform.GetType().GetField( + "command", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(compiledTransform); + MethodInfo executeMethod = command.GetType().GetMethod("Execute", BindingFlags.Instance | BindingFlags.NonPublic, + null, new Type[] { typeof(IXPathNavigable), typeof(XmlResolver), typeof(XsltArgumentList), typeof(XmlWriter) }, null); + executeMethod.Invoke(compiledTransform, + new object[] {nav, resolver, args, xmlWriter}); } - XmlWriterSettings DefaultWriterSettings { + public XmlWriterSettings DefaultWriterSettings { get { if (this.compiledTransform != null) { return this.compiledTransform.OutputSettings; Index: IXmlTransform.cs =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/src/Xsl/IXmlTransform.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- IXmlTransform.cs 15 Nov 2005 22:17:25 -0000 1.2 +++ IXmlTransform.cs 16 Nov 2005 21:51:10 -0000 1.3 @@ -7,24 +7,106 @@ #endregion namespace Mvp.Xml.Common.Xsl { + + /// <summary> + /// New experimental generic XML transform interface. Defines an API for + /// transforming <see cref="XmlInput"/> into <see cref="XmlOutput"/>. + /// </summary> public interface IXmlTransform { + /// <summary> + /// Transforms given <see cref="XmlInput"/> into <see cref="XmlOutput"/>. + /// </summary> + /// <param name="defaulDocument">Default input XML document</param> + /// <param name="args">Parameters</param> + /// <param name="output">Represents the transformation's output</param> void Transform(XmlInput defaulDocument, XsltArgumentList args, XmlOutput output); + /// <summary> + /// Defines default output settings. + /// </summary> XmlWriterSettings DefaultWriterSettings { get; } } + /// <summary> + /// XmlInput class represents generic XML input to a trasnformation. The actual + /// XML to be transformed can be provided as string URI, <see cref="Stream"/>, + /// <see cref="TextReader"/>, <see cref="XmlReader"/> or <see cref="IXPathNavigable"/>. + /// Optional <see cref="XmlResolver"/> is used to resolve external references when + /// loading input XML document and URIs in a "document()" function calls during + /// transformation. + /// </summary> public class XmlInput { internal object source ; internal XmlResolver resolver; + + /// <summary> + /// Creates new XmlInput object for an XML document provided as an + /// <see cref="XmlReader"/>. Also registers an <see cref="XmlResolver"/> to be used + /// for resolving external references in the XML document and document() function. + /// </summary> + /// <param name="reader">Input XML document</param> + /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(XmlReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } + /// <summary> + /// Creates new XmlInput object for an XML document provided as a + /// <see cref="TextReader"/>. Also registers an <see cref="XmlResolver"/> to be used + /// for resolving external references in the XML document and document() function. + /// </summary> + /// <param name="reader">Input XML document</param> + /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(TextReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } + /// <summary> + /// Creates new XmlInput object for an XML document provided as a + /// <see cref="Stream"/>. Also registers an <see cref="XmlResolver"/> to be used + /// for resolving external references in the XML document and document() function. + /// </summary> + /// <param name="stream">Input XML document</param> + /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(Stream stream, XmlResolver resolver) { this.source = stream; this.resolver = resolver; } + /// <summary> + /// Creates new XmlInput object for an XML document provided as an URI. + /// Also registers an <see cref="XmlResolver"/> to be used + /// for resolving external references in the XML document and document() function. + /// </summary> + /// <param name="uri">Input XML document</param> + /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(String uri , XmlResolver resolver) { this.source = uri ; this.resolver = resolver; } + /// <summary> + /// Creates new XmlInput object for an XML document provided as an + /// <see cref="IXPathNavigable"/>. Also registers an <see cref="XmlResolver"/> to be used + /// for resolving document() function. + /// </summary> + /// <param name="nav">Input XML document</param> + /// <param name="resolver"><see cref="XmlResolver"/> to resolve external references</param> public XmlInput(IXPathNavigable nav , XmlResolver resolver) { this.source = nav ; this.resolver = resolver; } - public XmlInput(XmlReader reader) : this(reader, new XmlUrlResolver()) {} - public XmlInput(TextReader reader) : this(reader, new XmlUrlResolver()) {} - public XmlInput(Stream stream) : this(stream, new XmlUrlResolver()) {} - public XmlInput(String uri ) : this(uri , new XmlUrlResolver()) {} - public XmlInput(IXPathNavigable nav ) { this.source = nav ; } + /// <summary> + /// Creates new XmlInput object for an XML document provided as an + /// <see cref="XmlReader"/>. + /// </summary> + /// <param name="reader">Input XML document</param> + public XmlInput(XmlReader reader) : this(reader, new DefaultXmlResolver()) {} + /// <summary> + /// Creates new XmlInput object for an XML document provided as a + /// <see cref="TextReader"/>. + /// </summary> + /// <param name="reader">Input XML document</param> + public XmlInput(TextReader reader) : this(reader, new DefaultXmlResolver()) {} + /// <summary> + /// Creates new XmlInput object for an XML document provided as a + /// <see cref="Stream"/>. + /// </summary> + /// <param name="stream">Input XML document</param> + public XmlInput(Stream stream) : this(stream, new DefaultXmlResolver()) {} + /// <summary> + /// Creates new XmlInput object for an XML document provided as an URI. + /// </summary> + /// <param name="uri">Input XML document</param> + public XmlInput(String uri ) : this(uri , new DefaultXmlResolver()) {} + /// <summary> + /// Creates new XmlInput object for an XML document provided as an + /// <see cref="IXPathNavigable"/>. + /// </summary> + /// <param name="nav">Input XML document</param> + public XmlInput(IXPathNavigable nav ) : this(nav , new DefaultXmlResolver()) {} // We can add set of implicit constructors. // I am not shre that this will be for good, so I commented them for now. @@ -35,12 +117,43 @@ //public static implicit operator XmlInput(XPathNavigator nav ) { return new XmlInput(nav ); } // the trick doesn't work with interfaces } + /// <summary> + /// XmlOutput class represents generic XML transformation output. An output XML + /// can be written to an URI, <see cref="Stream"/>, <see cref="TextWriter"/> or + /// <see cref="XmlWriter"/>. + /// </summary> public class XmlOutput { internal object destination; + /// <summary> + /// Creates new XmlOutput object over an <see cref="XmlWriter"/>. + /// </summary> + /// <param name="writer">An <see cref="XmlWriter"/> to write output to</param> public XmlOutput(XmlWriter writer) { this.destination = writer; } + /// <summary> + /// Creates new XmlOutput object over a <see cref="TextWriter"/>. + /// </summary> + /// <param name="writer">A <see cref="TextWriter"/> to write output to</param> public XmlOutput(TextWriter writer) { this.destination = writer; } - public XmlOutput(Stream strm ) { this.destination = strm ; } + /// <summary> + /// Creates new XmlOutput object over a <see cref="Stream"/>. + /// </summary> + /// <param name="stream">A <see cref="Stream"/> to write output to</param> + public XmlOutput(Stream stream ) { this.destination = strm ; } + /// <summary> + /// Creates new XmlOutput object over an URI. + /// </summary> + /// <param name="uri">An URI to write output to</param> public XmlOutput(String uri ) { this.destination = uri ; } // We will add overrides with XmlOutputResolver here later to support multiple output documents (<xsl:result-document>) } + + /// <summary> + /// XmlUrlResolver wrapper allowing us to recognize the case when no + /// XmlResolver was passed. + /// </summary> + internal class DefaultXmlResolver : XmlUrlResolver + { + public DefaultXmlResolver() + : base() {} + } } |