Kann nicht meine tatsächlichen Anwendungsfall zu arbeiten. Mein Code ist derzeitBenötigen Sie eine XSL-Lösung zu implementieren, aber ein Problem
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="bundle-main">
<div
class="container"
data-page-type="bundle"
>
<div class="row">
<xsl:for-each select="//bundles-entry-by-bundle/entry/components/item">
<xsl:variable name="id" select="@id" />
<xsl:if test="@section-handle = 'components-text'">
<xsl:for-each select="//*[concat(@section-handle,'-entry-by-bundle')]/entry[@id = $id]">
<xsl:call-template name="components-text"/>
</xsl:for-each>
</xsl:if>
<xsl:if test="@section-handle = 'components-link'">
<xsl:for-each select="//*[concat(@section-handle,'-entry-by-bundle')]/entry[@id = $id]">
<xsl:call-template name="components-link"/>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</div>
</div>
</xsl:template>
</xsl:stylesheet>
Das druckt eine Zeile, aber es muss die 12-Spalten-Wrapper implementieren. Mein Versuch lohnt sich nicht, da es nicht ganz funktioniert. Ich glaube, dass der Schlüsselwähler so etwas wie
sum(*[name() = concat($stack-items/@section-handle, '-entry-by-bundle')]/entry[@id = //bundles-entry-by-bundle/entry/components/item/@id]/columns/item/@handle) >= 12 or $i >= count($items)
Hier ist der XML
<?xml version="1.0" encoding="utf-8" ?>
<data>
<bundles-entry-by-bundle>
<section id="1" handle="bundles">Bundles</section>
<entry id="3">
<components>
<item id="10" handle="perfect-fit-finder-4-columns" section-handle="components-link" section-name="Components: Link">Perfect fit finder (4 columns)</item>
<item id="13" handle="collection-morning-run-8-column" section-handle="components-link" section-name="Components: Link">Collection: Morning run (8 column)</item>
<item id="14" handle="collection-weekend-adventures-4-column" section-handle="components-link" section-name="Components: Link">Collection: Weekend Adventures (4 column)</item>
</components>
</entry>
</bundles-entry-by-bundle>
<fl-languages>
<current-language handle="en" language="en" region="">English</current-language>
<supported-languages>
<item handle="en" main="yes">English</item>
<item handle="fr">Français</item>
<item handle="es">Español</item>
</supported-languages>
</fl-languages>
<components-text-entry-by-bundle>
<section id="4" handle="components-text">Components: Text</section>
<error>No records found.</error>
</components-text-entry-by-bundle>
<components-link-entry-by-bundle>
<section id="6" handle="components-link">Components: Link</section>
<entry id="14">
<headline-above mode="formatted" handle="collection-2" word-count="1" lang="en" handle-en="collection-2" handle-fr="" handle-es="">Collection</headline-above>
<headline mode="formatted" handle="weekend-adventures" word-count="2" lang="en" handle-en="weekend-adventures" handle-fr="" handle-es="">Weekend Adventures</headline>
<color has-color="no" />
<columns>
<item handle="4">4</item>
</columns>
<square-image size="23.28 MB" bytes="24413135" path="/uploads/components-link" type="image/jpeg">
<filename>weekend-collection-en-1462960850.jpg</filename>
<meta creation="2016-05-11T02:00:51-08:00" width="4656" height="4656" />
</square-image>
<click-hint>No</click-hint>
<style>
<item handle="modern">Modern</item>
</style>
</entry>
<entry id="13">
<headline-above mode="formatted" handle="collection" word-count="1" lang="en" handle-en="collection" handle-fr="" handle-es="">Collection</headline-above>
<headline mode="formatted" handle="morning-run" word-count="2" lang="en" handle-en="morning-run" handle-fr="" handle-es="">Morning Run</headline>
<color has-color="no" />
<columns>
<item handle="8">8</item>
</columns>
<square-image size="257 KB" bytes="263474" path="/uploads/components-link" type="image/jpeg">
<filename>morning-run-square-en-1462939487.jpg</filename>
<meta creation="2016-05-10T20:04:47-08:00" width="995" height="995" />
</square-image>
<wide-image size="457 KB" bytes="468427" path="/uploads/components-link" type="image/jpeg">
<filename>morning-run-en-1462939487.jpg</filename>
<meta creation="2016-05-10T20:04:47-08:00" width="2096" height="995" />
</wide-image>
<click-hint>No</click-hint>
<style>
<item handle="modern">Modern</item>
</style>
</entry>
<entry id="10">
<headline mode="formatted" handle="perfect-fit-finder" word-count="3" lang="en" handle-en="perfect-fit-finder" handle-fr="" handle-es="">Perfect fit finder</headline>
<color r="0" g="168" b="225" has-color="yes">#00a8e1</color>
<columns>
<item handle="4">4</item>
</columns>
<icon size="2 KB" bytes="2102" path="/uploads/components-link" type="image/svg+xml">
<filename>shoe-icon-en-1462909181.svg</filename>
<meta creation="2016-05-10T11:39:41-08:00" width="100" height="41.7" />
</icon>
<click-hint>Yes</click-hint>
<style>
<item handle="bold">Bold</item>
</style>
</entry>
</components-link-entry-by-bundle>
</data>
Hier ist die solution würde ich mit dem obigen XML implementieren möchten und meine XSL zu ersetzen. Dieser Code
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/root">
<xsl:copy>
<xsl:call-template name="aggregate">
<xsl:with-param name="items" select="item"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="aggregate">
<xsl:param name="items" select="/.."/>
<xsl:param name="i" select="1"/>
<xsl:variable name="stack-items" select="$items[position() <= $i]" />
<xsl:choose>
<xsl:when test="sum($stack-items/@columns) >= 12 or $i >= count($items)">
<row>
<xsl:copy-of select="$stack-items"/>
</row>
<xsl:if test="$i < count($items)">
<xsl:call-template name="aggregate">
<xsl:with-param name="items" select="$items[position() > $i]"/>
</xsl:call-template>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="aggregate">
<xsl:with-param name="items" select="$items"/>
<xsl:with-param name="i" select="$i + 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Ich verstehe nicht, was Sie versuchen, hier zu tun. Bitte (1) posten Sie das erwartete Ergebnis und (2) erklären Sie die Logik, die angewendet werden muss, um sie zu erhalten. Das Entfernen der Teile, die dabei keine Rolle spielen, wäre ebenfalls hilfreich. --- Sie sagen, dass Ihre aktuelle XSLT "eine Zeile druckt", aber das stimmt einfach nicht. Tatsächlich tut es nichts, weil Ihre oberste Schablone nie aufgerufen wird, und die eingebauten Standardschablonen treten ein, um alle Textknoten im Quell-XML auszugeben –
Sie sind völlig richtig, mein schlechtes, mein Ziel nicht klarer zu machen. Ich habe es aktualisiert, um klarer zu sein. –
Sie erhalten viel eher eine Antwort, wenn Sie Ihre erwartete Ausgabe posten, wie @ michael.hor257k vorgeschlagen. –