Wie kann ich eine XSLT-Datei ausführen?

10994
Torben Gundtofte-Bruun

Ich habe eine großartige Antwort zum Sortieren von XML erhalten - ich muss XSLT verwenden . Aber wie mache ich das eigentlich? Welche Software wird benötigt?

Welchen Befehl oder welche Anwendung brauche ich, um eine "konvertierte" XML-Ausgabedatei zu erhalten, wenn ich eine XML-Datei und eine XSLT-Datei als Eingabe habe?

Ich habe keine Entwicklungsumgebung installiert. Dies ist ein normaler Bürocomputer mit WinXP + IE7.

Update:
Mit Hilfe dieser Site habe ich ein kleines Paket erstellt, das ich freigeben möchte: XML-Sorter_v0.3.zip

4

3 Antworten auf die Frage

6
Michael Kay

Entscheiden Sie zunächst, ob Sie XSLT 1.0 oder 2.0 verwenden möchten. XSLT 2.0 ist eine viel reichere Sprache, und der einzige Grund für die Bevorzugung von XSLT 1.0 ist, dass es in einer größeren Anzahl von Umgebungen (z. B. im Browser) unterstützt wird.

Entscheiden Sie dann, welchen XSLT-Prozessor Sie verwenden möchten. Es gibt eine große Auswahl für XSLT 1.0. eine etwas engere Wahl für XSLT 2.0.

Dann lesen Sie in der Dokumentation des XSLT-Prozessors nach, wie er ausgeführt wird.

Da Sie mit dem Ausführen der Umwandlung von der Windows-Befehlszeile aus in Ordnung zu sein scheinen, würde ich empfehlen, Saxon-HE zu verwenden, das Sie von http://saxon.sf.net/ erhalten . Sie müssen Java installieren und dann Saxon ausführen. Die Dokumentation ist hier: http://www.saxonica.com/documentation/index.html#!using-xsl/commandline

Wenn Sie eine einfache GUI-Oberfläche bevorzugen, sollten Sie "Kernow for Saxon" in Betracht ziehen.

Wenn Sie eine Entwicklungsumgebung mit einem netten Editor und Debugger wünschen, müssen Sie dafür bezahlen. Stylus Studio und oXygen bieten jedoch ein gutes Preis-Leistungs-Verhältnis. Beide bieten Ihnen eine Auswahl an XSLT-Engines.

Die Installation einer Entwicklungs-Suite scheint mir übertrieben zu sein, aber ich habe gerade die Saxon-JAR-Datei heruntergeladen. Das scheint den Trick zu tun - zumindest generiert er eine Ausgabedatei! Ob diese Datei korrekt ist, ist hier nicht Teil meiner Frage. Vielen Dank!! Torben Gundtofte-Bruun vor 12 Jahren 0
Der Befehlszeilen-Dokumentationslink ist nicht mehr gültig. fixer1234 vor 8 Jahren 0
@ fixer1234: Ich habe einen Stich drauf. (Die Wayback-Maschine ist eine gute Sache.) G-Man vor 8 Jahren 1
2
TiCL

Ein XSLT-Prozessor wie Xalan-J für eine Befehlszeilenlösung. Für einen GUI-Editor / -Debugger können Sie hier Eclipse verwenden, ein Tutorial .

Bearbeiten: Eine vollständig webbasierte Lösung finden Sie hier

Der webbasierte Lösungslink war eine nette Bearbeitung. Robino vor 9 Jahren 0
0
BozoJoe

vorausgesetzt, Sie verfügen über Powershell, die XML-Datei und die XSLT-Datei

<# .SYNOPSIS Transform an xml file .DESCRIPTION load a XML file and load a XSLT file, then transform the XML using the XSLT and output to the console .PARAMETER $xsltfilename The path to the XSLT file .PARAMETER $filename The path to the XML file to be transformed .EXAMPLE C:\PS>  .\tranform.ps1 .\rgs_broke.xml .\fix_escalation.xslt > rgs_fixed.xml .NOTES Author: Alex McCool Date: Jan 17, 2017 #>  param( [Parameter(Mandatory=$true)] [string]$xsltfilename,  [Parameter(Mandatory=$true)] [string]$filename )   function Load-Xml { param([string]$filename)  $content = Get-Content $filename  $stream = new-object System.IO.MemoryStream  $writer = new-object System.IO.StreamWriter($stream) $writer.Write("$content") $writer.Flush() $stream.position = 0  $xml = new-object System.Xml.XmlTextReader($stream)  return $xml }  function Load-Xslt { param([string]$filename)  $content = Get-Content $filename  $stream = new-object System.IO.MemoryStream $writer = new-object System.IO.StreamWriter($stream) $writer.Write("$content") $writer.Flush() $stream.position = 0  $reader = [System.Xml.XmlReader]::create($stream) $xslt = New-Object System.Xml.Xsl.XslCompiledTransform $xslt.Load($reader)  return $xslt }   $xml = Load-Xml($filename) $xslt = Load-Xslt($xsltfilename)  $output = New-Object System.IO.MemoryStream $reader = new-object System.IO.StreamReader($output)   $arglist = new-object System.Xml.Xsl.XsltArgumentList $xslt.Transform($xml, $arglist, $output)  $output.position = 0 $transformed = [string]$reader.ReadToEnd() $reader.Close()  write-output $transformed 

Und hier ist ein Kern, falls es sich ändert

https://gist.github.com/amccool/560b533f1ea94560e0dae6367c2b75ce