XML-Technologien
Posts 1-9 of 9
-
Post visible to registered members
-
Markus Wiedenmaier Premium MemberThe company name is only visible to registered members.Re: xsl-Ausgabe in eine andere Datei und Knoten zur Laufzeit ändern?
Hallo Frau Obländer,
ich würde gerne eine Datei mit Hilfe von Stylesheet aus einer xml-Datei erzeugen. Ich benuzte zur Transfromation Visual Studio, und der verwendet Saxon nehme ich an. Ich möchte selbst den Zieldateinamen festlegen, wie würde das gehen ohne java-Anweisung auf der Console? Mit <xsl:output> habe ich nur wenig Spielraum welche Endung die Datei bekommen soll: xml, txt, html. Ich möchte aber unter einem anderen Dateiformat speichern. Mit <xsl:result-document> gibt es ja diese Möglichkeit, nur nicht unter Saxon. Das ist schon klar. Wenn es keine weiteren Möglichkeiten gibt, wie komme ich an das Saxon unter Visual Studio? Da kann ich vielleicht die Anweisungsreihenfolge als Übergabeparameter oder sowas vielleicht mitgeben!?
auch auf die Gefahr hin, dass ich die Frage nicht richtig verstehe. Ich gehe nicht davon aus, dass VS mit Saxon arbeitet sondern eine Microsoft-Technologie wie msxsl resp. das DotNet-FrameWork benutzt. Ich gehe davon aus, dass Sie das XML manuell aus VS transformieren wollen.
Zu einem simplen XML
<text>beliebiger Inhalt</text>
das Stylesheet unter Visual Studio
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" >
<xsl:output method="text" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
Bei geöffneten XSLT die Eigenschaften anzeigen. Bei Ausgabe result.txt eingeben und bei Eingabe das entsprechende XML.
Das Ergebnis ist eine Datei mit Namen "result.txt" und dem Inhalt "beliebiger Inhalt".
Neben den Einstellungen method="text" ist das attribut omit-xml-declaration="yes" wichtig, das das schreiben des XML-Prologs verhindert.
Wenn Sie das ganze unter der konsole ausführen (mit msxsl) ist der aufruf dann wie folgt
msxsl.exe ihr.xml ihr.xslt -o result.txt
Hoffe das hilft weiter.
Schöne Grüße
Markus Wiedenmaier
- 29 Apr 2011, 9:24 pm
-
Markus Wiedenmaier Premium MemberThe company name is only visible to registered members.Re: xsl-Ausgabe in eine andere Datei und Knoten zur Laufzeit ändern?
Hallo Frau Obländer,
Und meine 2te Frage wäre: Gibt es eine Möglichkeit einen Knoten der in der Zieldatei geschrieben wird zur Laufzeit ändern?
auch diese Frage verstehe ich nicht ganz. Wenn Sie einen Knoten transformieren und ausgegeben haben, ist er geschrieben. Sie können Ihn dann in einem zweiten durchlauf nochmals ggf. mit einem 2. XSLT transformieren. Somit bauen Sie quasi eine Pipeline auf.
Ansonsten können Sie eine Ausgabe in eine Variable umleiten und da Sie mit VS arbeiten mit der Extension msxsl:nodeset, die Variable in Knoten zurückverwandeln die Sie nochmals anfassen können.
Ein Beispiel:
http://msdn.microsoft.com/de-de/library/hz88kef0.aspx
Die Frage ist aber ob das überhaupt notwendig ist, denn ein solches Konstrukt, ist relativ selten notwendig. Vielleicht können Sie mir nochmals helfen, damit ich die Frage etwas besser verstehe.
Schöne Grüße
Markus Wiedenmaier
- 29 Apr 2011, 9:35 pm
-
Post visible to registered members
-
Post visible to registered members
-
Markus Wiedenmaier Premium MemberThe company name is only visible to registered members.Re^4: xsl-Ausgabe in eine andere Datei und Knoten zur Laufzeit ändern?
Hallo Frau Opländer,
es muss was anderes unter VS als Saxon sein, weil die Angabe von <xsl:result-document.../> nicht verstanden wird
Es ist das DotNet-FrameWork, welches Klassen für die Transformation bereitstellt. Leider unterstützt das DotNet-FrameWork nur die Version 1.0 von XSLT und BTW: MS stellt sich hier leider immer noch quer. <xsl:result-document.../> ist im XSLT 2.0 Standard definiert. Für XSLT2.0 gibt es z.B. die .Net-Implementierung von SAXON, welche allerdings kostenpflichtig ist.
, sondern in der xsl-Datei irgendwie einbauen
hmm. Irgendwie müssen Sie das XSL doch prozessieren. Von alleine tut das ja nichts sondern sieht nur schön aus ;-). Also mit irgend einer Anwendung müssen Sie den Transformationsprozess starten, sei es integriert in Ihrer Anwendung, wie Sie es im Beispiel tun oder mit einer externen Anwendung, wie msxsl, saxon, xalan, und wie sie alle heißen.
"result-document" macht dann Sinn, wenn Sie mehrere Ausgabedateien in einem Prozessschritt erzeugen möchten. In Ihrem Fall, zumindest entnehme ich das dem Beispiel, gibt es ein einziges Ausgabedokument, somit braucht es hierfür <xsl:result-document.../> nicht.
Schöne Grüße
Markus Wiedenmaier
- 02 May 2011, 11:40 am
-
Reinhard MüllerThe company name is only visible to registered members.Re^5: xsl-Ausgabe in eine andere Datei und Knoten zur Laufzeit ändern?
Hallo,
das Problem mit dem Knotennamen sollte sich folgendermaßen lösen lassen:
<xsl:element name="{$hallo}">...</xsl:element>
Dadurch wird ohne if-Abfrage immer ein Knoten erzeugt, dessen Namen dem Inhalt der Variablen entspricht.
Viele Grüße,
Reinhard Müller
- 02 May 2011, 1:25 pm
-
Post visible to registered members
-
Markus Wiedenmaier Premium MemberThe company name is only visible to registered members.Re^6: xsl-Ausgabe in eine andere Datei und Knoten zur Laufzeit ändern?
Hallo Herr D.,
>Vom Saxon gibt es auch eine freie Version unter der Mozilla Public Licence
Danke für den Hinweis, wusste nicht die HE auch für DotNet verfügbar ist.
Schöne Grüße
Markus Wiedenmaier
- 03 May 2011, 2:07 pm
