xslt: variable Einstellung für-jeden
Ich versuche, den export einiger Daten im xml-format von filemaker mit Hilfe von XSLT. Ich möchte die gleichen Daten angezeigt, die in drei Orten auf der xml. Ich war die Anzeige der Daten einmal per for-each-tag. Einige, wie eine variable verwendet werden kann hier, aber ich weiß nicht wie.
<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
<xsl:for-each select="fmp:COL[3]/fmpATA">
<marker>
<name>
<xsl:value-of select="."/>
</name>
<xsl:variable name="pos" select="position()" />
<comment>
<xsl:value-of select="../../fmp:COL[6]/fmpATA[$pos]"/>
</comment>
<in>
<xsl:value-of select="../../fmp:COL[4]/fmpATA[$pos]"/>
</in>
<out>
<xsl:value-of select="../../fmp:COL[5]/fmpATA[$pos]"/>
</out>
</marker>
</xsl:for-each>
</xsl:for-each>
Aber wenn ich exportieren möchten, die oben genannten Daten in drei verschiedenen Orten in der gleichen XML, schlägt fehl. Was auch immer die Daten in den oben genannten xslt kopiert werden muss, so dass ich es verwenden können in anderen Orten in demselben xslt. Ich bin nicht ein XSLT-person, so meine Entschuldigungen am Anfang wenn ich mich nicht ganz klar. Vielen Dank
Ausgabe:
<?xml version="1.0" encoding="UTF-8"?>
<xmeml version="1">
<sequence id="test_clip">
<name>test_clip</name>
<duration>7704</duration>
<rate>
<ntsc>FALSE</ntsc>
<timebase>25</timebase>
</rate>
<timecode>
<rate>
<ntsc>FALSE</ntsc>
<timebase>25</timebase>
</rate>
<string/>
<frame>90000</frame>
<source>source</source>
<displayformat>NDF</displayformat>
</timecode>
<in>-1</in>
<out>-1</out>
<media>
<video>
<format>
<samplecharacteristics>
<width>1024</width>
<height>576</height>
<anamorphic>FALSE</anamorphic>
<pixelaspectratio>Square</pixelaspectratio>
<fielddominance>none</fielddominance>
<rate>
<ntsc>FALSE</ntsc>
<timebase>25</timebase>
</rate>
<colordepth>24</colordepth>
<codec>
<name>H.264</name>
<appspecificdata>
<appname>Final Cut Pro</appname>
<appmanufacturer>Apple Inc.</appmanufacturer>
<appversion>7.0</appversion>
<data>
<qtcodec>
<codecname>H.264</codecname>
<codectypename>H.264</codectypename>
<codectypecode>avc1</codectypecode>
<codecvendorcode>appl</codecvendorcode>
<spatialquality>1023</spatialquality>
<temporalquality>0</temporalquality>
<keyframerate>0</keyframerate>
<datarate>0</datarate>
</qtcodec>
</data>
</appspecificdata>
</codec>
</samplecharacteristics>
<appspecificdata>
<appname>Final Cut Pro</appname>
<appmanufacturer>Apple Inc.</appmanufacturer>
<appversion>7.0</appversion>
<data>
<fcpimageprocessing>
<useyuv>TRUE</useyuv>
<usesuperwhite>FALSE</usesuperwhite>
<rendermode>YUV8BPP</rendermode>
</fcpimageprocessing>
</data>
</appspecificdata>
</format>
<track>
<clipitem id="testclip3 ">
<name>testclip3</name>
<duration>7501</duration>
<rate>
<ntsc>FALSE</ntsc>
<timebase>25</timebase>
</rate>
<in>0</in>
<out>7501</out>
<start>203</start>
<end>7704</end>
<pixelaspectratio>Square</pixelaspectratio>
<enabled>TRUE</enabled>
<anamorphic>FALSE</anamorphic>
<alphatype>none</alphatype>
<masterclipid>testclip3 1</masterclipid>
<logginginfo>
<good>FALSE</good>
</logginginfo>
<file id="testclip3 2">
<name>testclip3.mov</name>
<pathurl>file://localhost/Users/itsupport/Desktop/testclip3.mov</pathurl>
<rate>
<timebase>25</timebase>
</rate>
<duration>7501</duration>
<media>
<video>
<duration>7501</duration>
<samplecharacteristics>
<width>1024</width>
<height>576</height>
</samplecharacteristics>
</video>
<audio>
<rate>
<timebase>48000</timebase>
</rate>
<trackcount>2</trackcount>
<samplecharacteristics>
<depth>16</depth>
</samplecharacteristics>
</audio>
</media>
</file>
<marker>
<name>Marker 1</name>
<comment>Man uses lit lighter to read postcard and sets fire to it accidentally</comment>
<in>911814</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 2</name>
<comment>Painting</comment>
<in>913654</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 3</name>
<comment/>
<in>914031</in>
<out>914032</out>
</marker>
<marker>
<name>Marker 4</name>
<comment>Women</comment>
<in>925375</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 5</name>
<comment>Old woman</comment>
<in>932350</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 6</name>
<comment>car accident</comment>
<in>933750</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 7</name>
<comment/>
<in>900000</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 8</name>
<comment/>
<in>943925</in>
<out>-1</out>
</marker>
<sourcetrack>
<mediatype>video</mediatype>
</sourcetrack>
<link>
<linkclipref>testclip3 </linkclipref>
<mediatype>video</mediatype>
<trackindex>1</trackindex>
<clipindex>1</clipindex>
</link>
<link>
<linkclipref>testclip3 3</linkclipref>
<mediatype>audio</mediatype>
<trackindex>1</trackindex>
<clipindex>1</clipindex>
<groupindex>1</groupindex>
</link>
<link>
<linkclipref>testclip3 4</linkclipref>
<mediatype>audio</mediatype>
<trackindex>2</trackindex>
<clipindex>1</clipindex>
<groupindex>1</groupindex>
</link>
<fielddominance>none</fielddominance>
</clipitem>
<enabled>TRUE</enabled>
<locked>FALSE</locked>
</track>
</video>
<audio/>
</media>
<ismasterclip>FALSE</ismasterclip>
<marker>
<name>Marker 1</name>
<comment>Man uses lit lighter to read postcard and sets fire to it accidentally</comment>
<in>911814</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 2</name>
<comment>Painting</comment>
<in>913654</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 3</name>
<comment/>
<in>914031</in>
<out>914032</out>
</marker>
<marker>
<name>Marker 4</name>
<comment>Women</comment>
<in>925375</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 5</name>
<comment>Old woman</comment>
<in>932350</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 6</name>
<comment>car accident</comment>
<in>933750</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 7</name>
<comment/>
<in>900000</in>
<out>-1</out>
</marker>
<marker>
<name>Marker 8</name>
<comment/>
<in>943925</in>
<out>-1</out>
</marker>
<filter>
<effect>
<name>Distort</name>
<effectid>deformation</effectid>
<effectcategory>motion</effectcategory>
<effecttype>motion</effecttype>
<mediatype>video</mediatype>
<parameter>
<parameterid>aspect</parameterid>
<name>Aspect</name>
<valuemin>-10000</valuemin>
<valuemax>10000</valuemax>
<value>33.3333</value>
</parameter>
</effect>
</filter>
</sequence>
</xmeml>
Werden Sie feststellen, die Marke1,2,3...8 tags doppelt angezeigt in der oben genannten xml. Dies ist, wie ich die xml angezeigt.
Jetzt in XSLT bitte beachten Sie, dass habe ich kopiert die "for-each" tag zweimal. Funktioniert dies nicht.
XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:fmp="http://www.filemaker.com/fmpxmlresult"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="fmp">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<xmeml version="1">
<sequence id="test_clip">
<name>test_clip</name>
<duration>7704</duration>
<rate>
<ntsc>FALSE</ntsc>
<timebase>25</timebase>
</rate>
<timecode>
<rate>
<ntsc>FALSE</ntsc>
<timebase>25</timebase>
</rate>
<string><xsl:value-of select="fmp:COL[1]/fmp:DATA"/></string>
<frame>90000</frame>
<source>source</source>
<displayformat>NDF</displayformat>
</timecode>
<in>-1</in>
<out>-1</out>
<media>
<video><format>
<samplecharacteristics>
<width>1024</width>
<height>576</height>
<anamorphic>FALSE</anamorphic>
<pixelaspectratio>Square</pixelaspectratio>
<fielddominance>none</fielddominance>
<rate>
<ntsc>FALSE</ntsc>
<timebase>25</timebase>
</rate>
<colordepth>24</colordepth>
<codec>
<name>H.264</name>
<appspecificdata>
<appname>Final Cut Pro</appname>
<appmanufacturer>Apple Inc.</appmanufacturer>
<appversion>7.0</appversion>
<data>
<qtcodec>
<codecname>H.264</codecname>
<codectypename>H.264</codectypename>
<codectypecode>avc1</codectypecode>
<codecvendorcode>appl</codecvendorcode>
<spatialquality>1023</spatialquality>
<temporalquality>0</temporalquality>
<keyframerate>0</keyframerate>
<datarate>0</datarate>
</qtcodec>
</data>
</appspecificdata>
</codec>
</samplecharacteristics>
<appspecificdata>
<appname>Final Cut Pro</appname>
<appmanufacturer>Apple Inc.</appmanufacturer>
<appversion>7.0</appversion>
<data>
<fcpimageprocessing>
<useyuv>TRUE</useyuv>
<usesuperwhite>FALSE</usesuperwhite>
<rendermode>YUV8BPP</rendermode>
</fcpimageprocessing>
</data>
</appspecificdata>
</format>
<track>
<clipitem id="testclip3 ">
<name>testclip3</name>
<duration>7501</duration>
<rate>
<ntsc>FALSE</ntsc>
<timebase>25</timebase>
</rate>
<in>0</in>
<out>7501</out>
<start>203</start>
<end>7704</end>
<pixelaspectratio>Square</pixelaspectratio>
<enabled>TRUE</enabled>
<anamorphic>FALSE</anamorphic>
<alphatype>none</alphatype>
<masterclipid>testclip3 1</masterclipid>
<logginginfo>
<good>FALSE</good>
</logginginfo>
<file id="testclip3 2">
<name>testclip3.mov</name>
<pathurl>file://localhost/Users/itsupport/Desktop/testclip3.mov</pathurl>
<rate>
<timebase>25</timebase>
</rate>
<duration>7501</duration>
<media>
<video>
<duration>7501</duration>
<samplecharacteristics>
<width>1024</width>
<height>576</height>
</samplecharacteristics>
</video>
<audio>
<rate>
<timebase>48000</timebase>
</rate>
<trackcount>2</trackcount>
<samplecharacteristics>
<depth>16</depth>
</samplecharacteristics>
</audio>
</media>
</file>
<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
<xsl:for-each select="fmp:COL[3]/fmp:DATA">
<marker>
<name>
<xsl:value-of select="."/>
</name>
<xsl:variable name="pos" select="position()" />
<comment>
<xsl:value-of select="../../fmp:COL[6]/fmp:DATA[$pos]"/>
</comment>
<in>
<xsl:value-of select="../../fmp:COL[4]/fmp:DATA[$pos]"/>
</in>
<out>
<xsl:value-of select="../../fmp:COL[5]/fmp:DATA[$pos]"/>
</out>
</marker>
</xsl:for-each>
</xsl:for-each>
<sourcetrack>
<mediatype>video</mediatype>
</sourcetrack>
<link>
<linkclipref>testclip3 </linkclipref>
<mediatype>video</mediatype>
<trackindex>1</trackindex>
<clipindex>1</clipindex>
</link>
<link>
<linkclipref>testclip3 3</linkclipref>
<mediatype>audio</mediatype>
<trackindex>1</trackindex>
<clipindex>1</clipindex>
<groupindex>1</groupindex>
</link>
<link>
<linkclipref>testclip3 4</linkclipref>
<mediatype>audio</mediatype>
<trackindex>2</trackindex>
<clipindex>1</clipindex>
<groupindex>1</groupindex>
</link>
<fielddominance>none</fielddominance>
</clipitem>
<enabled>TRUE</enabled>
<locked>FALSE</locked>
</track>
</video>
<audio></audio>
</media>
<ismasterclip>FALSE</ismasterclip>
<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
<xsl:for-each select="fmp:COL[3]/fmp:DATA">
<marker>
<name>
<xsl:value-of select="."/>
</name>
<xsl:variable name="pos" select="position()" />
<comment>
<xsl:value-of select="../../fmp:COL[6]/fmp:DATA[$pos]"/>
</comment>
<in>
<xsl:value-of select="../../fmp:COL[4]/fmp:DATA[$pos]"/>
</in>
<out>
<xsl:value-of select="../../fmp:COL[5]/fmp:DATA[$pos]"/>
</out>
</marker>
</xsl:for-each>
</xsl:for-each>
<filter>
<effect>
<name>Distort</name>
<effectid>deformation</effectid>
<effectcategory>motion</effectcategory>
<effecttype>motion</effecttype>
<mediatype>video</mediatype>
<parameter>
<parameterid>aspect</parameterid>
<name>Aspect</name>
<valuemin>-10000</valuemin>
<valuemax>10000</valuemax>
<value>33.3333</value>
</parameter>
</effect>
</filter>
</sequence>
</xmeml>
</xsl:template>
</xsl:stylesheet>
Sorry, ich völlig verpasst Ihre Antwort. Ja genau das, was ich Suche. Dank
InformationsquelleAutor Lutfi Shah | 2013-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es wirklich hilfreich, wenn Sie uns zeigte, Probe-Eingang und-Ausgang. Aber von Ihrer Beschreibung, was Sie wollen zu tun ist, um zu erfassen das Ergebnis des xsl:-jede in einer Variablen:
Die einzige Sache, die davor hüten, ist, dass in XSLT 1.0 ist der Wert von $temp ist ein "result tree fragment", und es gibt ernste Beschränkungen auf, wie Sie es verwenden können; es ist sehr oft notwendig, um die Anbieter-spezifischen xx:node-set () - Erweiterung zu konvertieren, es zu einem ordentlichen Knoten.
Sorry, es ist zu lang und kompliziert für mich zu sehen am Freitag Abend.
InformationsquelleAutor Michael Kay
Könnten Sie split, die definition und die Ausführung der Schleife.
Ihre Schleife wird dann:
Wann immer Sie wollen-rufen, Schleife Sie ein
Wenn es nur die Daten, aber keine tags, etwas ist falsch mit Ihrem
match
Attribut.Ich bin nicht sicher, was ich falsch mache hier. aber ich habe jetzt Hinzugefügt das komplette xslt-code in meiner ursprünglichen Frage.
InformationsquelleAutor Nils Werner
Als Michael Kay erwähnt, können Sie erfassen das Ergebnis einer
for-each
in eine variable, und dann können Siexsl:copy-of
ausgeben, wo Sie Sie brauchen, wie diese:Mehr lesbar Ansatz ist die Trennung der for-each-in eine Vorlage und nennen, wo Sie es brauchen:
Aber die sauberste und am meisten XSLT-artige Ansatz ist der richtige Einsatz von pattern-matching-templates, und loszuwerden, die
for-each
es ganz:InformationsquelleAutor JLRishe