Thomas J.S.: Muss man Online sein?

Beitrag lesen

Hallo,

das problem ist: du verwendest die alte unbd ungültige syntax von microsoft.
xml datei:
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ELEMENT test (datensatz)+>
<!ELEMENT datensatz (name, alter?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT alter (#PCDATA)>
<!ATTLIST name id ID #REQUIRED>
]>
<?xml-stylesheet href="goce.xsl" type="text/xsl" ?>
<test>

<datensatz>
<name id="1">Thomas</name>
<alter>20</alter>
</datensatz>

<datensatz>
<name id="2">Michael</name>
<alter>23</alter>
</datensatz>

<datensatz>
<name id="3">Angela</name>
<alter>17</alter>
</datensatz>

</test>
--------

xsl datei:
<?xml version="1.0" ?>
<!-- der namespace hier muss richtig sein, deine war die alte -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>

<xsl:template match="test">
<xsl:for-each select="datensatz">
<xsl:sort select="name" />
<p><xsl:value-of select="name"/></p>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

-----------

Nun habe ich ne neue frage:
Wenn ich einen einen link baue mit:
<a><attribute name="href">#</attribute>..blabla.. </a>
und mir je nachdem auf welchen link ich drücke er mir nur von diesem datensatz das alter ausspuckt (ein bestimmtes apply-templates aufruft.)
Wie verwende ich da ID und wo wird es eingetragen???

das hast zwei teile:
erstens das einfache:
<xsl:for-each select="datensatz">
<xsl:sort select="name" />
<p>
   <a>
      <xsl:attribute name="href">goce.xml?<xsl:value-of select="name/@id" /></xsl:attribute>
      <xsl:value-of select="name"/>
   </a>
</p>

</xsl:for-each>

zweitens, dass geht so nur, wenn du in deiner XSL Datei auch einen paramter auf "id" setzt und diese abfragst, etwa so:

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

<xsl:param name="alter" select="''" />

<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>

<xsl:template match="test">
<xsl:for-each select="datensatz">
<xsl:sort select="name" />
xsl:choose
   <xsl:when test="$alter = name/@id">
      <p>
         <xsl:value-of select="name[@id = $alter]"/> ist <xsl:value-of select="alter" />
      </p>
   </xsl:when>
   xsl:otherwise
      <p>
         <a>
            <xsl:attribute name="href">goce.xml?alter=<xsl:value-of select="name/@id" /></xsl:attribute>
            <xsl:value-of select="name"/>
         </a>
      </p>
   </xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

----
dann sieht ein link z.B. so aus:
http://localhost/test/goce.xml?alter=1

ud wird diese html datei erzeugt:

<html>
<body>
<p><a href="goce.xml?alter=3">Angela</a></p>
<p><a href="goce.xml?alter=2">Michael</a></p>
<p>Thomas ist 20</p>
</body>
</html>

deshalb localhost, weil der interne parser im IE diese abfrage nicht kann. also musste ich es mit einem anderen programm testen (das war cocoon und er geht nur online, also serverseitig)

allerdings du kannst auch JavaScript einsetzten um den IE dazu zu bewegen, deine wünsche auszuführen. da kann ich dir aber nicht weiterhelfen.

grüße
thomas