Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/mcs
diff options
context:
space:
mode:
authorAlan Tam <alantam@mono-cvs.ximian.com>2003-03-10 18:30:02 +0300
committerAlan Tam <alantam@mono-cvs.ximian.com>2003-03-10 18:30:02 +0300
commit6fcef570a72afa5b9a11d7453ae79bb10d7ba6db (patch)
treeb04cbf80b037607ad612dbe48e8de43eadd38eff /mcs
parent1fa0fb7c1e5b1398352d1f9c10a15195cb9103d4 (diff)
2003-03-10 Alan Tam <Tam@SiuLung.com>
* XslTransform.cs: Implemented boolean, number and string parameters. (Node Set and Node Iterator parameters and Extension Objects are left.) * XsltAttributeList.cs: Loosened access modifiers. svn path=/trunk/mcs/; revision=12405
Diffstat (limited to 'mcs')
-rw-r--r--mcs/class/System.XML/System.Xml.Xsl/ChangeLog6
-rw-r--r--mcs/class/System.XML/System.Xml.Xsl/XslTransform.cs45
-rw-r--r--mcs/class/System.XML/System.Xml.Xsl/XsltArgumentList.cs4
3 files changed, 44 insertions, 11 deletions
diff --git a/mcs/class/System.XML/System.Xml.Xsl/ChangeLog b/mcs/class/System.XML/System.Xml.Xsl/ChangeLog
index bf577aa8d81..7d8fba63a29 100644
--- a/mcs/class/System.XML/System.Xml.Xsl/ChangeLog
+++ b/mcs/class/System.XML/System.Xml.Xsl/ChangeLog
@@ -1,3 +1,9 @@
+2003-03-10 Alan Tam <Tam@SiuLung.com>
+
+ * XslTransform.cs: Implemented boolean, number and string parameters.
+ (Node Set and Node Iterator parameters and Extension Objects are left.)
+ * XsltAttributeList.cs: Loosened access modifiers.
+
2003-02-20 Nick Drochak <ndrochak@gol.com>
* XslTransform.cs: Remove confusing and unused parameter.
diff --git a/mcs/class/System.XML/System.Xml.Xsl/XslTransform.cs b/mcs/class/System.XML/System.Xml.Xsl/XslTransform.cs
index df76b24915e..04140b75235 100644
--- a/mcs/class/System.XML/System.Xml.Xsl/XslTransform.cs
+++ b/mcs/class/System.XML/System.Xml.Xsl/XslTransform.cs
@@ -171,7 +171,7 @@ namespace System.Xml.Xsl
if (xmlDocument == IntPtr.Zero)
throw new XmlException ("Error parsing input file");
- resultDocument = ApplyStylesheet (xmlDocument);
+ resultDocument = ApplyStylesheet (xmlDocument, null);
/*
* If I do this, the <?xml version=... is always present *
if (-1 == xsltSaveResultToFilename (outputfile, resultDocument, stylesheet, 0))
@@ -191,12 +191,12 @@ namespace System.Xml.Xsl
}
}
- IntPtr ApplyStylesheet (IntPtr doc)
+ IntPtr ApplyStylesheet (IntPtr doc, string[] argArr)
{
if (stylesheet == IntPtr.Zero)
throw new XmlException ("No style sheet!");
- IntPtr result = xsltApplyStylesheet (stylesheet, doc, IntPtr.Zero);
+ IntPtr result = xsltApplyStylesheet (stylesheet, doc, argArr);
if (result == IntPtr.Zero)
throw new XmlException ("Error applying style sheet");
@@ -231,9 +231,9 @@ namespace System.Xml.Xsl
return result.ReadToEnd ();
}
- string ApplyStylesheetAndGetString (IntPtr doc)
+ string ApplyStylesheetAndGetString (IntPtr doc, string[] argArr)
{
- IntPtr xmlOutput = ApplyStylesheet (doc);
+ IntPtr xmlOutput = ApplyStylesheet (doc, argArr);
string strOutput = GetStringFromDocument (xmlOutput);
xmlFreeDoc (xmlOutput);
@@ -251,13 +251,26 @@ namespace System.Xml.Xsl
return xmlInput;
}
- [MonoTODO("args")]
+ [MonoTODO("Node Set and Node Fragment Parameters and Extension Objects")]
// Transforms the XML data in the XPathNavigator using
// the specified args and outputs the result to an XmlReader.
public XmlReader Transform (XPathNavigator input, XsltArgumentList args)
{
IntPtr xmlInput = GetDocumentFromNavigator (input);
- string xslOutputString = ApplyStylesheetAndGetString (xmlInput);
+ string[] argArr = new string[args.parameters.Count * 2 + 1];
+ int index = 0;
+ foreach (object key in args.parameters.Keys) {
+ argArr [index++] = key.ToString();
+ object value = args.parameters [key];
+ if (value is Boolean)
+ argArr [index++] = XmlConvert.ToString((bool) value); // FIXME: How to encode it for libxslt?
+ else if (value is Double)
+ argArr [index++] = XmlConvert.ToString((double) value); // FIXME: How to encode infinity's and Nan?
+ else
+ argArr [index++] = "'" + value.ToString() + "'"; // FIXME: How to encode "'"?
+ }
+ argArr[index] = null;
+ string xslOutputString = ApplyStylesheetAndGetString (xmlInput, argArr);
xmlFreeDoc (xmlInput);
Cleanup ();
@@ -303,6 +316,7 @@ namespace System.Xml.Xsl
// Transforms the XML data in the XPathNavigator using
// the specified args and outputs the result to a TextWriter.
+ [MonoTODO("Node Set and Node Fragment Parameters and Extension Objects")]
public void Transform (XPathNavigator input, XsltArgumentList args, TextWriter output)
{
if (input == null)
@@ -312,7 +326,20 @@ namespace System.Xml.Xsl
throw new ArgumentNullException ("output");
IntPtr inputDoc = GetDocumentFromNavigator (input);
- string transform = ApplyStylesheetAndGetString (inputDoc);
+ string[] argArr = new string[args.parameters.Count * 2 + 1];
+ int index = 0;
+ foreach (object key in args.parameters.Keys) {
+ argArr [index++] = key.ToString();
+ object value = args.parameters [key];
+ if (value is Boolean)
+ argArr [index++] = XmlConvert.ToString((bool) value); // FIXME: How to encode it for libxslt?
+ else if (value is Double)
+ argArr [index++] = XmlConvert.ToString((double) value); // FIXME: How to encode infinity's and Nan?
+ else
+ argArr [index++] = "'" + value.ToString() + "'"; // FIXME: How to encode "'"?
+ }
+ argArr[index] = null;
+ string transform = ApplyStylesheetAndGetString (inputDoc, argArr);
xmlFreeDoc (inputDoc);
Cleanup ();
output.Write (transform);
@@ -458,7 +485,7 @@ namespace System.Xml.Xsl
static extern IntPtr xsltParseStylesheetDoc (IntPtr docPtr);
[DllImport ("xslt")]
- static extern IntPtr xsltApplyStylesheet (IntPtr stylePtr, IntPtr DocPtr, IntPtr notused);
+ static extern IntPtr xsltApplyStylesheet (IntPtr stylePtr, IntPtr DocPtr, string[] argPtr);
[DllImport ("xslt")]
static extern int xsltSaveResultToFilename (string URI, IntPtr doc, IntPtr styleSheet, int compression);
diff --git a/mcs/class/System.XML/System.Xml.Xsl/XsltArgumentList.cs b/mcs/class/System.XML/System.Xml.Xsl/XsltArgumentList.cs
index e4ac3b138f0..5031cb21bcf 100644
--- a/mcs/class/System.XML/System.Xml.Xsl/XsltArgumentList.cs
+++ b/mcs/class/System.XML/System.Xml.Xsl/XsltArgumentList.cs
@@ -14,8 +14,8 @@ namespace System.Xml.Xsl
{
#region Fields
- private Hashtable extensionObjects;
- private Hashtable parameters;
+ internal Hashtable extensionObjects;
+ internal Hashtable parameters;
#endregion