Hi Boris,
It would be nice to have such tool and mcs/tools/blah is fine. Problems
are:
- We are not likely to add further functionality before Mono 1.2
(thus am even refrained from adding forgotten "dtd2rng" in
mono/scripts...)
- The name should be better and general ;-)
Actually during recent relaxng development I created similar but mostly
XML
validation oriented tool (i.e. like xmllint or xsltproc), attached. I
haven't put it into svn mostly because it is too cheap and misses many
expected things (like XSLT params).
Both of your code and it could be merged into a single tool.
Atsushi Eno
> Hello all,
>
> I've build a simple "1-line-of-code" tool that applies xsl
> transformation to xml files, in order to transform NUnit output xml
> files to more suitable format to be used by automatic testing engine.
>
> Actually, I tried first to find such a tool in svn repository...
> somewhere in tools, but it was not here :(
>
> Does such a tool exists in svn repository, and if not - where can I
> commit this one (is mcs\tools\xmlformatter a good place)?
>
> Thanks,
> Boris
>
> --
> Boris Kirzner
> Mono R&D team, Mainsoft Corporation.
> Blogging at http://boriskirzner.blogspot.com/
> ___
> Mono-devel-list mailing list
> Mono-devel-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Xsl;
using System.Xml.XPath;
using Commons.Xml.Nvdl;
using Commons.Xml.Relaxng;
using Commons.Xml.Relaxng.Rnc;
using XSchema = System.Xml.Schema.XmlSchema;
namespace Commons.Xml.Relaxng
{
public class Driver
{
public static void Main (string [] args)
{
try {
Run (args);
} catch (Exception ex) {
if (Environment.GetEnvironmentVariable ("MONO_XMLTOOL_ERROR_DETAILS") == "yes")
Console.WriteLine (ex);
else
Console.WriteLine (ex.Message);
}
}
static void Usage ()
{
Console.WriteLine (@"
Usage: mono-xmltool [options]
options:
--validate [*.rng | *.rnc | *.nvdl | *.xsd] [instance]
--validate-rng relax-ng-grammar-xml instance-xml
--validate-rnc relax-ng-compact-grammar-file instance-xml
--validate-nvdl nvdl-script-xml instance-xml
--validate-xsd xml-schema instance-xml
--transform stylesheet instance-xml
environment variable that affects on the behavior:
MONO_XMLTOOL_ERROR_DETAILS = yes : to get exception details.
");
}
static void Run (string [] args)
{
string command = null;
if (args.Length == 0) {
Usage ();
return;
}
switch (args [0]) {
default:
case "--help":
Usage ();
return;
case "--validate-rnc":
ValidateRelaxngCompact (args);
return;
case "--validate-rng":
ValidateRelaxngXml (args);
return;
case "--validate-nvdl":
ValidateNvdl (args);
return;
case "--validate-xsd":
ValidateXsd (args);
return;
case "--validate":
ValidateAuto (args);
return;
case "--transform":
Transform (args);
return;
}
}
static void ValidateAuto (string [] args)
{
if (args.Length < 1) {
Usage ();
return;
}
if (args [1].EndsWith ("rng"))
ValidateRelaxngXml (args);
else if (args [1].EndsWith ("rnc"))
ValidateRelaxngCompact (args);
else if (args [1].EndsWith ("nvdl"))
ValidateNvdl (args);
else if (args [1].EndsWith ("xsd"))
ValidateXsd (args);
}
static void ValidateRelaxngXml (string [] args)
{
XmlReader xr = new XmlTextReader (args [1]);
RelaxngPattern p = RelaxngPattern.Read (xr);
xr.Close ();
ValidateRelaxng (p, args);
}
static void ValidateRelaxngCompact (string [] args)
{
StreamReader sr = new StreamReader (args [1]);
RelaxngPattern p = RncParser.ParseRnc (sr);
sr.Close ();
ValidateRelaxng (p, args);
}
static void ValidateRelaxng (RelaxngPattern p, string [] args)
{
XmlTextReader xtr = new XmlTextReader (args [2]);
RelaxngValidatingReader vr =
new RelaxngValidatingReader (xtr, p);
vr.ReportDetails = true;
while (!vr.EOF)
vr.Read ();
}
static void ValidateNvdl (string [] args)
{
XmlTextReader nvdlxtr = new XmlTextReader (args [1]);
NvdlRules nvdl = NvdlReader.Read (nvdlxtr);
nvdlxtr.Close ();
XmlTextReader xtr = new XmlTextReader (args [2]);
NvdlValidatingReader nvr = new NvdlValidatingReader (
xtr, nvdl);
while (!nvr.EOF)
nvr.Read ();
xtr.Close ();
}
static void ValidateXsd (string [] args)
{
XmlTextReader schemaxml = new XmlTextReader (args [1]);
XSchema xsd = XSchema.Read (schemaxml, null);
schemaxml.Close ();
XmlTextReader xtr = new XmlTextReader (args [2]);
XmlValidatingReader xvr = new XmlValidatingReader (xtr);
xvr.Schemas.Add (xsd);
while (!xvr.EOF)
xvr.Read ();
xvr.Close ();
}
static void Transform (string [] args)
{
XslTransform t = new XslTransform ();
t.Load (args