Matthias: XSL und &

Hallo zusammen,

ich arbeite im Moment mit einem Stylesheet, das als outputmethod html benutzt:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >

<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" encoding="iso-8859-1" />

In diesem Stylesheet gibt es einen Abschnitt, in dem die Maskierung von & zu &amp; funktioniert: D.h. es steht im Quelltext der HTML-Seite die ich erzeuge auch ein einzelnes &. Hier der Abschnitt:

<xsl:template match="/">
    <html>
      <head>
        <title>title</title>
        <style type="text/css">
        </style>
        <script language="javascript" type="text/javascript">
             ... &amp; ....
        </script>
.....

die unrelevanten Teile habe ich mal weggelassen.

Weiter unten in dem File versuche ich nun das gleiche: Ein & in den HTML-Code ausgeben zu lassen. Allerdings erscheint das &amp; oder &#38; auch als &amp; im HTML-Code.

</script>
      </head>
      <body>
          .........
      </body>
.....

Liegt das daran, dass es im <body> ausgegeben wird, und Xalan so clever ist es dann maskiert zu lassen?

Oder an etwas vollkommen anderem?

Und was kann ich machen, dass dann auch einfach ein & in meinem Code steht?

Gruss und Danke,
Matthias

  1. Hello out there!

    D.h. es steht im Quelltext der HTML-Seite die ich erzeuge auch ein einzelnes &.

    Steht dort ein unmaskiertes '&' stehen?

    Und was kann ich machen, dass dann auch einfach ein & in meinem Code steht?

    Warum sollte dort ein unmaskiertes '&' stehen?

    Kannst du mal beschreiben, wie das generierte HTML aussehen soll?

    See ya up the road,
    Gunnar

    --
    „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    1. Hello out there!

      D.h. es steht im Quelltext der HTML-Seite die ich erzeuge auch ein einzelnes &.

      Steht dort ein unmaskiertes '&' stehen?

      Ja... im <head> bereich steht ein unmaskiertes &, wenn ich im <body> teil eines ausgeben will, bleibt es maskiert.

      Und was kann ich machen, dass dann auch einfach ein & in meinem Code steht?

      Warum sollte dort ein unmaskiertes '&' stehen?

      In einem Link zur Parameterübergabe ;-)

      <a href="page.php?param=1&param2=2......">

      Kannst du mal beschreiben, wie das generierte HTML aussehen soll?

      See ya up the road,
      Gunnar

      1. Hello out there!

        <a href="page.php?param=1&param2=2......">

        So sollte das generierte HTML eben gerade NICHT aussehen.

        Es muss
        <a href="page.php?param=1&amp;param2=2......"> heißen. [HTML401 §B.2.2]

        Das unmaskierte '&' an anderer Stelle ist dann wohl auch ein Fehler?

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        1. Hello out there!

          <a href="page.php?param=1&param2=2......">

          So sollte das generierte HTML eben gerade NICHT aussehen.

          Es muss
          <a href="page.php?param=1&amp;param2=2......"> heißen. [HTML401 §B.2.2]

          Das unmaskierte '&' an anderer Stelle ist dann wohl auch ein Fehler?

          See ya up the road,
          Gunnar

          Danke, wieder was gelernt!
          War mir absolut neu!!!

          Gruss und Danke,
          Matthias

  2. Hallo,

    die unrelevanten Teile habe ich mal weggelassen.

    Weiter unten in dem File versuche ich nun das gleiche: Ein & in den HTML-Code ausgeben zu lassen. Allerdings erscheint das &amp; oder &#38; auch als &amp; im HTML-Code.

    Der Teil des XSLs ist/wäre aber nicht unrelevant!

    Grüße
    Thomas

    1. Hallo,

      die unrelevanten Teile habe ich mal weggelassen.

      Weiter unten in dem File versuche ich nun das gleiche: Ein & in den HTML-Code ausgeben zu lassen. Allerdings erscheint das &amp; oder &#38; auch als &amp; im HTML-Code.

      Der Teil des XSLs ist/wäre aber nicht unrelevant!

      Grüße
      Thomas

      <xsl:template name="winsock_section">
          <xsl:variable name="md5">
       <xsl:value-of select="analysis/processes/process/@md5" />
          </xsl:variable>
          <table width="100%">
            <tr>
              <td class="bodyheader" colspan="2" style="padding: 3px; background-color: #666666;">
                <img src="http://research.sunbelt-software.com/tmp/icon.gif" width="20" height="16" border="0" style="vertical-align: middle;"/>
                Network Activity
              </td>
            </tr>
            <tr>
              <td class="bodycopy1">Connections</td>
              <td class="bodycopy2">
                <xsl:for-each select="//winsock_section">
                  <xsl:variable name="number" select="count(../preceding-sibling::*)+1"/>

      <!-- Get Host By Name -->
                  <xsl:if test="count(connections_unknown/connection/gethostbyname) != 0">
                    <table id="details" width="100%">
                      <tr>
                        <td  class="bodycopy1" colspan="2">DNS Lookup</td>
                      </tr>
                      <tr>
                        <td  class="bodycopy1" width="250">
                          <b>Host Name</b>
                        </td>
                        <td  class="bodycopy1" width="250">
                          <b>IP Address</b>
                        </td>
                      </tr>
                      <xsl:for-each select="connections_unknown/connection/gethostbyname">
                        <tr>
                          <td  class="bodycopy2">
                            <a><xsl:attribute name="href">?page=map&#38;ip=<xsl:value-of select="@resulting_addr" />&#38;md5=<xsl:value-of select="$md5" /></xsl:attribute><xsl:attribute name="target">_top</xsl:attribute><xsl:value-of select="@resulting_addr"/></a>
                          </td>
                        </tr>
                      </xsl:for-each>
                    </table>
                  </xsl:if>

      wie gesagt, das ganze wird innerhalb des <body> teiles ausgegeben...

      1. Hallo,

        Ist jetzt deine Frage mit https://forum.selfhtml.org/?t=156913&m=1020682 beantwortet worden?

        Grüße
        Thomas

    2. Hallo,

      die unrelevanten Teile habe ich mal weggelassen.

      Weiter unten in dem File versuche ich nun das gleiche: Ein & in den HTML-Code ausgeben zu lassen. Allerdings erscheint das &amp; oder &#38; auch als &amp; im HTML-Code.

      Der Teil des XSLs ist/wäre aber nicht unrelevant!

      Grüße
      Thomas

      Ich habe das ganze hier mal runtergebrochen:

      <?xml version="1.0" encoding="UTF-8" ?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
        <xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" encoding="iso-8859-1" />
        <xsl:template match="/">
          <html>
            <head>
              <title>title</title>
              <style type="text/css">
              </style>
              <script language="javascript" type="text/javascript">
                &amp;
              </script>
            </head>
            <body>
            &amp;
            </body>
          </html>
        </xsl:template>

      </xsl:stylesheet>

      Das &amp; im body wird als &amp; ausgegeben, das im head wird als einfaches & ausgegeben.

      Wie kann ich das beeinflussen?

      Gruss,
      Matthias