/* * msxsl2.cs * $Id$ * $CVSId: msxsl2.cs,v 1.1.1.1 2003/05/03 03:55:16 Mayuki Sawatari Exp $ * * Copyright (c) 2003 Mayuki Sawatari, All rights reserved. * * THIS SOFTWARE IS PROVIDED BY THE MISUZILLA.ORG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ using System; using System.IO; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; namespace Misuzilla { public sealed class MsXsl2 { public static Int32 Main(String[] args) { String outputPath = ""; XmlDocument xml = null; XslTransform xslt = null; XsltArgumentList xsltArgs = new XsltArgumentList(); if (args.Length < 2) { ShowUsage(); Console.WriteLine("エラー: ソースファイル/スタイルシートが指定されていません。"); return 1; } if (!File.Exists(args[0])) { ShowUsage(); Console.WriteLine("エラー: ソースファイル \"{0}\" は存在しません。", args[0]); return 1; } if (!File.Exists(args[1])) { ShowUsage(); Console.WriteLine("エラー: スタイルシート \"{0}\" は存在しません。", args[1]); return 1; } for (Int32 i = 2; args.Length > i; i++) { if (args[i].StartsWith("-o") && args.Length > i+1) { outputPath = args[i+1]; } else if(args[i].IndexOf('=') > 1 && args[i].IndexOf('=') != args[i].Length - 1) { String[] paramSet = args[i].Split(new Char[] {'='}, 2); xsltArgs.AddParam(paramSet[0], "", paramSet[1]); Console.WriteLine("{0}, {1}, {2}", paramSet[0], "", paramSet[1]); } } // xml try { xml = new XmlDocument(); xml.Load(args[0]); } catch (XmlException xe) { Console.WriteLine("\n\"{0}\"の読み込み中にエラーが発生しました。", args[0]); Console.WriteLine("行: {0}, 位置: {1}", xe.LineNumber, xe.LinePosition); Console.WriteLine("原因: {0}", xe.Message); return 1; } // xsl transformation xslt = new XslTransform(); try { xslt.Load(args[1]); if (outputPath == "") xslt.Transform(xml.CreateNavigator(), xsltArgs, Console.Out); else xslt.Transform(xml.CreateNavigator(), xsltArgs, new FileStream(outputPath, FileMode.Create)); //xslt.Transform(outputXmlPath, xsltsheet.Attributes["destination"].Value); } catch (XPathException xpathe) { Console.WriteLine("\n\n\"{0}\"でXPath実行中にエラーが発生しました。", args[1]); Console.WriteLine("原因: {0}", xpathe.Message); return 1; } catch (XsltException xslte) { Console.WriteLine("\n\n\"{0}\"でXSLT変換中にエラーが発生しました。", xslte.SourceUri); Console.WriteLine("行: {0}, 位置: {1}", xslte.LineNumber, xslte.LinePosition); Console.WriteLine("原因: {0}", xslte.Message); return 1; } return 0; } private static void ShowUsage() { Console.WriteLine("Microsoft (R) XSLT Processor (.NET Framework) Command-line Frontend"); Console.WriteLine(""); Console.WriteLine("Usage: msxsl2 source stylesheet [options] [param=value]"); Console.WriteLine(""); Console.WriteLine("Options:"); Console.WriteLine(" -o\t\t出力するファイル名を指定します"); Console.WriteLine(""); } } }