jens: DRINGEND: Tags in Attribut durch HTML-Tags ersetzen

Folgendes Problem:

Das Element Infos/Texte/Text besitzt ein Attribut Bezeichnung, welches ein <break>-Element enthält. Beim Parsen mit XSLT soll dies durch ein HTML-<br/>-Tag ersetzt werden.

Leider bekomme ich das nicht hin...

was ist hieran falsch?

<xsl:for-each select="a:JDF/Infos/Texte/Text[@Position='2']">
<xsl:apply-templates select="./@Bezeichnung"/>
[...]

<xsl:template match="a:JDF/Infos/Texte/Text/@Bezeichnung['break']">
<br/>
</xsl:template>

Bitte um Hilfe, ist sehr dringend!

  1. Hallo,

    <xsl:template match="a:JDF/Infos/Texte/Text/@Bezeichnung['break']">
    <br/>
    </xsl:template>

    Das macht so auch keinen Sinn.

    <xsl:template match="a:JDF/Infos/Texte/Text/@Bezeichnung[. = 'break']">

    Grüße
    Thomas

    1. Hallo,

      <xsl:template match="a:JDF/Infos/Texte/Text/@Bezeichnung['break']">
      <br/>
      </xsl:template>

      Das macht so auch keinen Sinn.

      <xsl:template match="a:JDF/Infos/Texte/Text/@Bezeichnung[. = 'break']">

      Grüße
      Thomas

      Danke, aber das funktioniert trotzdem nicht.
      Das Break wird nicht ersetzt...

      1. Hallo,

        <xsl:template match="a:JDF/Infos/Texte/Text/@Bezeichnung['break']">
        <br/>
        </xsl:template>

        Das macht so auch keinen Sinn.

        <xsl:template match="a:JDF/Infos/Texte/Text/@Bezeichnung[. = 'break']">

        Grüße
        Thomas

        Danke, aber das funktioniert trotzdem nicht.
        Das Break wird nicht ersetzt...

        Ich habe folgendes im XSLT:

        <xsl:for-each select="a:JDF/Infos/Texte/Text[@Position='2']">
        <xsl:value-of select="./@Memo"/>:
        <xsl:apply-templates select="./@Bezeichnung"/>
        </xsl:for-each>

        <xsl:template match="a:JDF/Infos/Texte/Text/@Bezeichnung[.='break']">
        <br/>
        </xsl:template>

        1. Hallo,

          <xsl:for-each select="a:JDF/Infos/Texte/Text[@Position='2']">
          <xsl:value-of select="./@Memo"/>:
          <xsl:if test="@Bezeichnung = 'break'">
           <br />
          </xsl:if>
          </xsl:for-each>

          oder wenn schon mit applay:temlates
          <xsl:for-each select="a:JDF/Infos/Texte/Text[@Position='2']">
          <xsl:value-of select="@Memo"/>:
          <xsl:apply-templates select="@Bezeichnung"/>
          </xsl:for-each>

          <xsl:template match="@Bezeichnung[.='break']">
          <br/>
          </xsl:template>

          Grüße
          Thomas

          1. <xsl:for-each select="a:JDF/Infos/Texte/Text[@Position='2']">
            <xsl:value-of select="./@Memo"/>:
            <xsl:if test="@Bezeichnung = 'break'">
             <br />
            </xsl:if>
            </xsl:for-each>

            Das Attribut Bezeichnung enthält nicht nur 'break' sondern auch Text, z.B. <bezeichnung>Dies ist ein <break/> test</bezeichnung>.

            Weisst Du da auch was?

            Vielen Dank für Deine Hilfe!

            MfG,

            Jens.

            1. Hallo,

              Das Attribut Bezeichnung enthält nicht nur 'break' sondern auch Text, z.B. <bezeichnung>Dies ist ein <break/> test</bezeichnung>.

              Weisst Du da auch was?

              Nein, denn dazu müsste ich dein XML für dieses Attribut sehen.
              Meinst du mit deinem Satz von oben sowas:
              <Text Bezeichnung="<bezeichnung>Dies ist ein <break/> test</bezeichnung>"></Text>

              oder wie soll ich es verstehen, dass Bezeichnung auch Text enthält?

              Grüße
              Thomas

              1. Hallo,

                Das Attribut Bezeichnung enthält nicht nur 'break' sondern auch Text, z.B. <bezeichnung>Dies ist ein <break/> test</bezeichnung>.

                Weisst Du da auch was?

                Nein, denn dazu müsste ich dein XML für dieses Attribut sehen.
                Meinst du mit deinem Satz von oben sowas:
                <Text Bezeichnung="<bezeichnung>Dies ist ein <break/> test</bezeichnung>"></Text>

                oder wie soll ich es verstehen, dass Bezeichnung auch Text enthält?

                Grüße
                Thomas

                Entschuldige, das Beispiel war falsch. In der Tat steht im Attribut "Das ist ein <break/> Test", also

                <Infos>
                <Texte>
                <Text Memo="..." Bezeichnung="Das ist ein <break/> Test"/>
                ...

                </Texte>
                </Infos>

                Der Attributinhalt kommt unformatiert aus einer Datenbank und ist dort als Memo-Feld mit festen Formatierungen hinterlegt. Wir möchten im COM-Objekt eine Umwandlung vornehmen und müssen an entsprechender Stelle ein <break> o.ä. einfügen was bei der Transfortmation in HTML entsprechend umgesetzt wird.

                Ich hoffe wir kommen hier noch zu Rande. Heute mittag 14 Uhr ist deadline... :-\

                Gruß & vielen Dank für Deine Hilfe...

                Jens.

                1. Hallo,

                  <Text Memo="..." Bezeichnung="Das ist ein <break/> Test"/>

                  Das ist mehr als nur schlecht.
                  Da muss jeder XML-Parser sofort schreien: Das Zeichen < kann in einem Attributwert nicht verwendet werden!

                  Der Attributinhalt kommt unformatiert aus einer Datenbank und ist dort als Memo-Feld mit festen Formatierungen hinterlegt. Wir möchten im COM-Objekt eine Umwandlung vornehmen und müssen an entsprechender Stelle ein <break> o.ä. einfügen was bei der Transfortmation in HTML entsprechend umgesetzt wird.

                  Bitte aber keine!!! Elemente in Attributwerten!
                  Dann lass es doch einen CR (carriage return)an der Stelle einfügen, wo der Zeilenumbruch kommen soll.
                  Das kannst du dann leicht ersetzen:

                  <xsl:template name="cr2br">
                   <xsl:param name="text" />
                   <xsl:variable name="textnachumbruch" select="substring-after($text, '&#xA;')" />
                   xsl:choose
                    <xsl:when test="contains($text, '&#xA;')">
                     <xsl:value-of select="substring-before($text, '&#xA;')" />
                     <br />
                     <xsl:call-template name="cr2br">
                     <xsl:with-param name="text" select="$textnachumbruch" />
                     </xsl:call-template>
                    </xsl:when>
                    xsl:otherwise
                     <xsl:value-of select="$text" />
                    </xsl:otherwise>
                   </xsl:choose>
                  </xsl:template>

                  Dann:
                  <xsl:template match="@Bezeichnung">
                   <xsl:call-template name="cr2br">
                   <xsl:with-param name="text" select="." />
                  </xsl:call-template>
                  </xsl:template>

                  Der Rest wie gewohnt.

                  Grüße
                  Thomas

                  1. Der Rest wie gewohnt.

                    Vielen Dank für Deine Hilfe!

                    Gruß, Maik.