hh: mit xsl im xml nach elementen mit attributen suchen und ausgeben

Hi,
ich habe folgendes Problem; xml etwa so

<root>
 <datum>
  <tag>heute</tag>
  <monat>januar</monat>
 <datum>
 <hosen>adihas</hosen>
 <schuhe>niko</schuhe>
 <tasche>samsinot</tasche>
 <jacke>biss</jacke>
 <bestellung booking=“BF100“/>
 <schuhe booking=“BF100“>niko</schuhe>
 <jacke booking=“BF100“>biss</jacke>
 <bestellung booking=“BF200“/>
 <schuhe booking=“BF200“>pumi</schuhe>
 <jacke booking=“BF200“>biss1</jacke>
</root>

mein stylesheet sieht nu so aus

<xsl:stylesheet ....>
 <xsl:template match=“/“>
  <xsl:value-of select=“datum/tag/“/>
  <form>
   <table>
    .
    .
    .
    <xsl:value-of select=“hosen“/>
    <xsl:value-of select=“turnschuhe“/>
    <xsl:value-of select=“jacke“/>
    .
    .
    .
   </table>
  </form>
 </xsl:template>
</xsl:stylesheet>

So nun meine Frage, wie kann ich jetzt dem stylsheet sagen, dass es das datum noch mit anzeigen soll, dann aber z.B. nur innerhalb von <form> soll er dann alle Elemente auswerten, die das attribute booking='BF100' haben. Wie macht man dies? Ich bin schon am verzweifeln. Das Stylesheet soll aber nicht geändert werden, wenn es halt ein element <hosen> ohne attribute booking='BF100' gibt, so soll er auch nichts ausgeben. Ich weiss, dass ich es glaube ich, so lösen koennte
<xsl:value-of select=“hosen[@booking='BF100']“/>
allerdings muesste ich dass dann überall anhängen, gibt es da nicht etwas Eleganteres, so dass man dem xsl generell sagt, in diesem Bereich nur Werte nehmen, die das entsprechendes Attribute haben, wenn für ein <xsl:value-of select="hosen" /> kein Element mit Attribute vorhanden, dann leer? Wuerde mich um Hilfe freuen.

  1. Hallo,

    So nun meine Frage, wie kann ich jetzt dem stylsheet sagen, dass es das datum noch mit anzeigen soll, dann aber z.B. nur innerhalb von <form> soll er dann alle Elemente auswerten, die das attribute booking='BF100' haben. Wie macht man dies? Ich bin schon am verzweifeln. Das Stylesheet soll aber nicht geändert werden, wenn es halt ein element <hosen> ohne attribute booking='BF100' gibt, so soll er auch nichts ausgeben. Ich weiss, dass ich es glaube ich, so lösen koennte
    <xsl:value-of select=“hosen[@booking='BF100']“/>
    allerdings muesste ich dass dann überall anhängen, gibt es da nicht etwas Eleganteres, so dass man dem xsl generell sagt, in diesem Bereich nur Werte nehmen, die das entsprechendes Attribute haben, wenn für ein <xsl:value-of select="hosen" /> kein Element mit Attribute vorhanden, dann leer? Wuerde mich um Hilfe freuen.

    So ganz schlau werde ich bei deinem Text nicht darüber, was du genau meinst.

    Wenn das Element <hosen> keine Attribut hat, kannst du das so abfragen:
    <xsl:if test="hosen[@booking]">
     <xsl:value-of select="hosen" />
    </xsl:if>

    Diese Abfrage greift nur dann, wenn es ein <hosen>-Element mit einem booking-Attribute gibt, egal was der Attributwert von booking ist.

    Wenn du das XSL allerdings nicht ändern kannst, weiss ich ehrlichgesagt nicht was du erreichen möchtest. Vielleicht versuchst du dein Problem nochmal zu beschreiben!?

    Grüße
    Thomas

    1. Hallo Thomas, danke für die schnelle Antwort und ich habe mir nochmal Mühe gegeben ;-) danach schaut die xml datei so aus:

      <?xml version="1.0" encoding="UTF-8"?>
      <root>
       <datum>
        <tag>heute</tag>
        <monat>januar</monat>
       </datum>
       <hosen>adihas</hosen>
       <schuhe>niko</schuhe>
       <pullover>wolli</pullover>
       <turnschuhe>mari</turnschuhe>
       <tasche>samsinot</tasche>
       <jacke>biss</jacke>
       <bestellung booking="BFV100" />
       <schuhe booking="BFV100">niko</schuhe>
       <jacke booking="BFV100">biss</jacke>
       <bestellung booking="BFV200"/>
       <schuhe booking="BFV200">pumi</schuhe>
       <jacke booking="BFV200">biss1</jacke>
      </root>

      und meine xsl dazu so:

      <?xml version='1.0' encoding='utf-8'?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="html"/>
      <xsl:template match="/">
      <html>
      <head/>
      <form>
      <xsl:if test="*[@booking='BFV100']">
      <body>
      <table width="100%" border="1">
      <tbody>
            <tr>
             <td width="20%">hosen</td>
             <td width="20%">
              <xsl:value-of select="root/hosen"/>
             </td>
            </tr>
            <tr>
             <td width="20%">pullover</td>
             <td width="20%">
              <xsl:value-of select="root/pullover"/>
             </td>
            </tr>
            <tr>
             <td width="20%">turnschuhe</td>
             <td width="20%">
              <xsl:value-of select="root/turnschuhe"/>
             </td>
            </tr>
            <tr>
             <td width="20%">jacke</td>
             <td width="20%">
              <xsl:value-of select="root/jacke"/>
             </td>
            </tr>
            <tr>
             <td width="20%">schuhe</td>
             <td width="20%">
              <xsl:value-of select="root/schuhe"/>
             </td>
            </tr>
           </tbody>
          </table>
         </body>
        </xsl:if>
        </form>
       </html>
      </xsl:template>
      </xsl:stylesheet>

      Wenn ich nun die beiden parsen, dann sollten doch jetzt eigentlich zumindest für die elemente schuhe und jacke mit booking="BFV100" angezeigt werden, es wird aber bi mir überhaupt nichts an Wert angezeigt, wo ist da mein denkfehler?

      1. Hallo,

        Hallo Thomas, danke für die schnelle Antwort und ich habe mir nochmal Mühe gegeben ;-) danach schaut die xml datei so aus:

        <?xml version="1.0" encoding="UTF-8"?>
        <root>
        <datum>
        <bestellung booking="BFV100" />
        <schuhe booking="BFV100">niko</schuhe>

        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="html"/>
        <xsl:template match="/">
        <html>
        <head/>
        <form>
        <xsl:if test="*[@booking='BFV100']">
        <body>

        Wenn ich nun die beiden parsen, dann sollten doch jetzt eigentlich zumindest für die elemente schuhe und jacke mit booking="BFV100" angezeigt werden, es wird aber bi mir überhaupt nichts an Wert angezeigt, wo ist da mein denkfehler?

        Bei zwei Dingen hast du einen Fehler gemacht:
        a) bei deinem HTML: <form> steht zwischen <head> und <body>, das geht schon mal in HTML gar nicht. Stelle dann auch dein if-Abfrage innerhalb von <body>.
        b) bei deinem XSL:

        <xsl:template match="/"> trifft den Dokumentknoten, was das gesamte Dokument enthält:
        /(dok.knoten)
        --wurzelelement/(<root>)
                       --anderes element/ (z.B. datum, bestellung etc.)

        Du bist also mit
        <xsl:template match="/"> noch _vor_ deinem Wurzelelement und nun versuchst du ein Element mit dem Attribut @booking='BFV100' zu finden, das natürlich nicht auf diese Ebene gibt.

        Du kannst es entweder so: <xsl:template match="/root"> machen und dann reicht auch nur ein <xsl:value-of select="pullover"/> etc.

        Oder so:

        <xsl:template match="/">
        <html>
        <head>
         <title>Untitled</title>
        </head>
        <body>
        <xsl:apply-templates />
        </body>
        </html>
        </xsl:template>
        <xsl:template match="root">
        <xsl:if test="*[@booking ... ]">
        <form>
        ...
        <xsl:value-of select="hose" />
        ...
        </form>
        </xsl:if>
        </xsl:template>

        oder nach dem du die HTML-Struktur korrigiert hast auch einfach die Abfrage richtigstellen:
        <xsl:if test="root/*[@booking='BFV100']">

        Grüße
        Thomas

        1. Hallo Thomas,

          okay wegen a) großer Fehler von mir.
          zudem habe ich deinen weg unter b) angewendet und auch inhaltlich nachvollzogen. trotzdem greift der filter nicht, es werden wieder alle Element angezeigt, ob doch eigentlich nur die mit booking BFV100 angezeigt werden sollen. hier dies angepasste xsl (habe die tabelle aus Gründen der Übersichtlichkeit entfernt.

          <?xml version="1.0" encoding="utf-8"?>
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
           <xsl:output method="html"/>
           <xsl:template match="/">
            <html>
             <head/>
             <body>
              xsl:apply-templates/
             </body>
            </html>
           </xsl:template>

          <xsl:template match="root">
            <xsl:if test="*[@booking='BFV100']">
             <form>
              <p>hosen:
               <xsl:value-of select="hosen"/>
              </p>
              <p>taschen:
               <xsl:value-of select="tasche"/>
              </p>
              <p>jacke:
               <xsl:value-of select="jacke"/>
              </p>
              <p>schuhe:
               <xsl:value-of select="schuhe"/>
              </p>
              <p>pullover:
               <xsl:value-of select="pullover"/>
              </p>
              <p>turnschuhe:
               <xsl:value-of select="turnschuhe"/>
              </p>
             </form>
            </xsl:if>
           </xsl:template>
          </xsl:stylesheet>

          Als gewünschtes Ergbnis würde ich gerne das Ergebnis haben wollen:

          hosen:

          tasche:

          jacke: biss

          schuhe: niko

          pullover:

          turnschuhe:

          Nach dem obigen xsl gibt er aber überall eine xsl:value-of Wert aus;-(

          1. Hallo,

            okay wegen a) großer Fehler von mir.
            zudem habe ich deinen weg unter b) angewendet und auch inhaltlich nachvollzogen. trotzdem greift der filter nicht, es werden wieder alle Element angezeigt, ob doch eigentlich nur die mit booking BFV100 angezeigt werden sollen. hier dies angepasste xsl (habe die tabelle aus Gründen der Übersichtlichkeit entfernt.

            Das ist logisch, denn es wird nur überprüft, ob irgendeine der Elemente @booking=.... hat und weil/wenn das der Fall ist, wird alles ausgegeben.

            Als gewünschtes Ergbnis würde ich gerne das Ergebnis haben wollen:

            Jetzt verstehe ich was du möchtest:
            Es empfiehlt sich eine globale Variable zu erstellen (d.h. gleich nach <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">)

            <xsl:variable name="booking" select="'BFV100'" />

            Und dann so:
            <xsl:template match="root">
             <!-- <xsl:if test="*[@booking= $booking]"> -->
             <form>
              <xsl:for-each select="*">
               <p>
                <xsl:value-of select="local-name()" />:
                <xsl:if test="@booking= $booking">
                 <xsl:value-of select="." />
                </xsl:if>
               </p>
             </form>
             <!-- </xsl:if> -->
            </xsl:template>

            Ich habe die if-Abfrage auskommentiert, du brauchst sie nur dann, wenn es überhaupt nichts ausgegeben werden soll, falls bei keinem einzigen Element ein @booking-Attribut vorhanden ist.

            Willst du nicht den Namen des Elements ausgeben, sondern einen eigenen Text, muss du entweder für jede Element eine Abfrage schreiben:
            <p>hosen:
            <xsl:if test="hosen[@booking= $booking]">
              <xsl:value-of select="hosen" />
            </xsl:if>
            </p>
            <p>taschen:
             <xsl:if test="tasche[@booking= $booking]">
               <xsl:value-of select="tasche" />
            </xsl:if>
            </p>

            oder wenn du das XML erweitern kannst z.B. so: <hosen name="Hosen">...</hosen>, dann einfach statt  <xsl:value-of select="local-name()" />: ein <xsl:value-of select="@name" />: schreiben im obigen Template.

            Entsprechend geht das auch mit einer Tabelle:
            <xsl:template match="root">
             <!-- <xsl:if test="*[@booking= $booking]"> -->
             <xsl:for-each select="*">
             <tr>
              <td width="20%">
               <xsl:value-of select="local-name()" />
              </td>
              <td width="20%">
               <xsl:if test="@booking= $booking">
                <xsl:value-of select="." />
               </xsl:if>
              </td>
             </tr>
             </xsl:for-each>
             <!-- </xsl:if> -->
            </xsl:template>

            Grüße
            Thomas

            1. Hallo Thomas, bitte verzeih, wenn ich dich gleich direkt anfrage, aber ich bin erneut ratlos. ich habe mich vergeblich versucht, bzgl. xlink und linkbase einzulesen, werde aber einfach nicht schlau. vielleciht kannst du mir noch einmal helfen und einen tipp geben, wobei die lage nur etwas komplizierter wird.

              meine xml:
              *************************************
              <?xml version="1.0" encoding="UTF-8"?>
              <!-- Alte Zeile <?xml-stylesheet type="text/xsl" href="mps-individuale-en-2005-06-30.xsl"?> -->
              <xbrl  xmlns="http://www.xbrl.org/2003/instance"
                xmlns:link="http://www.xbrl.org/2003/linkbase"
                xmlns:xlink="http://www.w3.org/1999/xlink"
                xmlns:ff="http://www.xbrl.org/2005/role/restatedLabel"
                xmlns:ifrs-gp="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15"
                xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
                xmlns:ifrs-gp-rol="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/roles"
                      xmlns:ifrs-gp-typ="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/types">

              <!-- hier verweis auf die linkase in den jeweiligen xsd Schemas hingewiesen so vermute ich -->

              <link:schemaRef xlink:type="simple" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/ifrs-gp-roles-2005-05-15.xsd"/>
               <link:schemaRef xlink:type="simple" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/ifrs-gp-2005-05-15.xsd"/>
               <link:schemaRef xlink:type="simple" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/restatedLabel.xsd"/>

              <!-- nun die Elemente für die Vermögenswerte auf Deutsch Bilanz -->
               <ifrs-gp:CashAndCashEquivalents decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">331795547</ifrs-gp:CashAndCashEquivalents>
               <ifrs-gp:FinancialAssetsHeldForTradingTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">16535582956</ifrs-gp:FinancialAssetsHeldForTradingTotal>
               <ifrs-gp:FinancialAssetsDesignatedAsFairValueThroughProfitOrLossTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">33254175</ifrs-gp:FinancialAssetsDesignatedAsFairValueThroughProfitOrLossTotal>
               <ifrs-gp:DeferredTaxAssets decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">725566755</ifrs-gp:DeferredTaxAssets>
               <ifrs-gp:OtherAssetsTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">2115319189</ifrs-gp:OtherAssetsTotal>
               <ifrs-gp:AssetsTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">100359405529</ifrs-gp:AssetsTotal>

              <!-- nun die Elemente für Eigenkapital und Schulden -->
               <ifrs-gp:DebenturesAndDebtCertificates decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">14674205679</ifrs-gp:DebenturesAndDebtCertificates>
               <ifrs-gp:FinancialLiabilitiesHeldForTradingTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">6041129549</ifrs-gp:FinancialLiabilitiesHeldForTradingTotal>
               <ifrs-gp:FinancialLiabilitiesDesignatedAsFairValueThroughProfitOrLossTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">7570793557</ifrs-gp:FinancialLiabilitiesDesignatedAsFairValueThroughProfitOrLossTotal>
               <ifrs-gp:HedgingLiabilitiesTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">202521618</ifrs-gp:HedgingLiabilitiesTotal>
               <ifrs-gp:TaxLiabilitiesTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">348749332</ifrs-gp:TaxLiabilitiesTotal>
               <ifrs-gp:CurrentTaxPayables decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">134937065</ifrs-gp:CurrentTaxPayables>
               <ifrs-gp:DeferredTaxLiabilities decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">213812267</ifrs-gp:DeferredTaxLiabilities>
               <ifrs-gp:OtherLiabilitiesTotal decimals="0" contextRef="Current_AsOf" unitRef="U-Euros">3969087941</ifrs-gp:OtherLiabilitiesTotal>
              </xbrl>
              ***************************************************

              die http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/ifrs-gp-2005-05-15.xsd

              fängt so an:

              <?xml version="1.0" encoding="utf-8"?>
              <schema
                 xmlns="http://www.w3.org/2001/XMLSchema"
                 xmlns:xbrli="http://www.xbrl.org/2003/instance"
                 xmlns:link="http://www.xbrl.org/2003/linkbase"
                 xmlns:xlink="http://www.w3.org/1999/xlink"
                 xmlns:ifrs-gp="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15"
                 xmlns:ifrs-gp-typ="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/types"
                 targetNamespace="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15"
                 elementFormDefault="qualified"
                 attributeFormDefault="unqualified">

              <!-- hier wird auf die linkbase verwiesen -->

              <annotation>
                  <appinfo>
               <link:linkbaseRef xlink:type="simple" xlink:href="ifrs-gp-lab-2005-05-15.xml" xlink:role="http://www.xbrl.org/2003/role/labelLinkbaseRef" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:title="Label Links, all" />
               <link:linkbaseRef xlink:type="simple" xlink:href="ifrs-gp-ref-2005-05-15.xml" xlink:role="http://www.xbrl.org/2003/role/referenceLinkbaseRef" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:title="Reference Links, all" />
                  </appinfo>
                </annotation>

              <import namespace="http://www.xbrl.org/2003/instance" schemaLocation="http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd" />
                <import namespace="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/types" schemaLocation="ifrs-gp-types-2005-05-15.xsd" />

              </schema>

              *********************************************************

              meine xsl:
              ***************************************************
              <?xml version="1.0"?>
              <xsl:stylesheet version="1.0"
                 xmlns:xbrli="http://www.xbrl.org/2003/instance"
                 xmlns:xbrll="http://www.xbrl.org/2003/linkbase"
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:xlink="http://www.w3.org/1999/xlink"
                 xmlns:ifrs-gp="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15">
              <xsl:output method="html"/>
              <xsl:template match="/">
              <html>
              <head/>
              <body>
              <p>Bezeichnung:
              <(???????????????)"/>
              </p>
              <p>Wert:
                <xsl:value-of select="xbrli:xbrl/ifrs-gp:AssetsTotal"/>
              </p>
              </body>
              </html>
              </xsl:stylesheet>

              ***************************************************

              Mein Problem, wie bekomme ich für das Element in meiner xml "ifrs-gp:AssetsTotal" aus der linkbase "ifrs-gp-lab-2005-05-15.xml" die entsprechende Bezeichnung <label xlink:type="resource" ...>Assets Total</label>., denn da ist die Bezeichnung als der Name hinterlegt und lautet Assets Total. Ich habe mich versucht in xlink und linkbase
              einzulesen, aber ich finde einfach keine Weg, wie ich an der ???????????????? Stelle in meinem xsl  automatisch die Bezeichnung hinzufügen. Bisher habe ich die Bezeichnung in meinem xsl immer manuell eintippen muessen. Ich wuerde es aber gerne automatisieren, da es jetzt auch eine linkbase mit der deutschen Bezeichnung gibt, ich muesste demnach nur die label linkbase austauschen und nicht die Menge an einzelnen Posten neu schreiben bzw. wäre so ein xsl dann "mehrsprachfähig" da ich jeweils nur die entsprechende linkbase benötige.

              Wie gesagt eine harte Nuss für mich, vielleicht kannst du mir einen Tipp geben, wie ich es anstellen kann, das als Ergbnis da kommt:

              Bezeichnung: Assets Total
              Wert: 100359405529

              die xsd sowie die xml linkbase sind alle in einem zip.File erhältlich unter http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15/ifrs-gp-2005-05-15.zip

              Viele Grüße,

              Holger

              PS: leider ist auch noch keine Anleitung zu xlink und linkbase auf selfhtml.org

              1. Hallo,

                Hallo Thomas, bitte verzeih, wenn ich dich gleich direkt anfrage, aber ich bin erneut ratlos. ich habe mich vergeblich versucht, bzgl. xlink und linkbase einzulesen, werde aber einfach nicht schlau. vielleciht kannst du mir noch einmal helfen und einen tipp geben, wobei die lage nur etwas komplizierter wird.

                meine xml:

                Also von 'hosen' und 'taschen' haben wir uns ganz schön weit entfernt ;-)

                Mein Problem, wie bekomme ich für das Element in meiner xml "ifrs-gp:AssetsTotal" aus der linkbase "ifrs-gp-lab-2005-05-15.xml" die entsprechende Bezeichnung <label xlink:type="resource" ...>Assets Total</label>., denn da ist die Bezeichnung als der Name hinterlegt und lautet Assets Total. Ich habe mich versucht in xlink und linkbase
                einzulesen, aber ich finde einfach keine Weg, wie ich an der ???????????????? Stelle in meinem xsl  automatisch die Bezeichnung hinzufügen.

                Also du möchstes aus deinem XSL auf eine Datei die in deinem XML verlinkt ist zugreifen und aus der Datei dann auf eine dort verlinkte andere Datei.

                Das Erste Problem was du hast - wie du es selbst festgestellt hat (xmlns:xbrli) - ist die Frage des Defalut-Namespace in XSLT 1.0.

                Hier eine Datei die dir das Gewünschte liefert (Erklärungen darunter):
                -------------------------
                <?xml version="1.0"?>
                <xsl:stylesheet version="1.0"
                   xmlns:xbrli="http://www.xbrl.org/2003/instance"
                   xmlns:xbrll="http://www.xbrl.org/2003/linkbase"
                   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xlink="http://www.w3.org/1999/xlink"
                   xmlns:link="http://www.xbrl.org/2003/linkbase"
                   xmlns:ifrs-gp="http://xbrl.iasb.org/int/fr/ifrs/gp/2005-05-15">

                <xsl:variable name="pathToSchema" select="document(/*[local-name() = 'xbrl']/link:schemaRef[2]/@xlink:href)" />
                <xsl:variable name="pathToXML" select="document($pathToSchema/*[local-name() = 'schema']/*[local-name() = 'annotation']/*[local-name() = 'appinfo']/link:linkbaseRef[contains(@xlink:role, 'labelLinkbaseRef')]/@xlink:href)" />
                <xsl:variable name="pathToLabels" select="$pathToXML/*[local-name() = 'linkbase']/*[local-name() = 'labelLink']/*[local-name() = 'label']" />
                <xsl:output method="html"/>

                <xsl:template match="/">
                <html>
                <head/>
                <body>
                <p>Bezeichnung:<xsl:value-of select="$pathToLabels[@xlink:label = 'ifrs-gp_AssetsTotal_lbl']" /></p>
                <p>Wert:<xsl:value-of select="xbrli:xbrl/ifrs-gp:AssetsTotal"/>
                </p>
                <!-- <xsl:apply-templates select="xbrli:xbrl/ifrs-gp:AssetsTotal" /> -->
                </body>
                </html>
                </xsl:template>
                <!--
                <xsl:template match="ifrs-gp:AssetsTotal">
                <xsl:variable name="name" select="name()" />
                <p>Bezeichnung:<xsl:value-of select="$pathToLabels[@xlink:label = concat(translate($name, ':', '_'), '_lbl')]" />
                </p>
                <p>Wert:
                  <xsl:value-of select="."/>
                </p>
                </xsl:template>
                 -->
                </xsl:stylesheet>
                -------------------------------------------------

                Variable "pathToSchema":
                Ich habe überall mit local-name() gearbeitet, da der Default-Namespace nur auf dein XML-Datei wirkt, aber dann nicht mehr auf die anderen verlinkten Dateien.
                "link:schemaRef[2]" ließ sich nicht vermeiden, da es sonst keine Unterschiedungsmöglichkeit zwischen den "link:schemaRef"-Elementen gab.

                Variable "pathToXML" spricht soweit für sich.

                Variable "pathToLabels": spricht auch für sich, aber wenn du z.B. deutsche Bezeichnungen vorselektieren willst kannst du am "/*[local-name() = 'label']" ein "[@xml:lang = 'de']" anhängen: /*[local-name() = 'label'][@xml:lang = 'de']
                oder so machen: /*[(local-name() = 'label') and (@xml:lang = 'de')]

                Bisher habe ich die Bezeichnung in meinem xsl immer manuell eintippen muessen.

                Wärest du fast noch immer besser dran ;-)

                Ich wuerde es aber gerne automatisieren, da es jetzt auch eine linkbase mit der deutschen Bezeichnung gibt, ich muesste demnach nur die label linkbase austauschen und nicht die Menge an einzelnen Posten neu schreiben bzw. wäre so ein xsl dann "mehrsprachfähig" da ich jeweils nur die entsprechende linkbase benötige.

                Dafür steht der auskommentierter Teil im Beispiel XSL, damit du das doch nicht von Hand schreiben musst.

                Wie gesagt eine harte Nuss für mich, vielleicht kannst du mir einen Tipp geben, wie ich es anstellen kann, das als Ergbnis da kommt:

                Ic habe das jetzt mit Saxon und dem MSXML (und mit den Online-Dateien) getestet und das Ergebnis war:
                <body>
                      <p>Bezeichnung:Assets, Total</p>
                      <p>Wert:100359405529</p>
                </body>

                Ich hoffe es hilft dir weiter.

                Grüße
                Thomas

                PS: vergiss nicht im <xsl:stylesheet ein exclude-result-prefixes -Attribut und darin alle Namensraumpräfixe anzugeben (exclude-result-prefixes="xlink link ifrs-gp ..."), sonst hast du sie am Ende alle in deinem HTML.