Cyberfuzzy: Link - Prüfen ob Datei vorhanden ist?

Hallo,

wenn ich in einer XSL-Datei auf eine andere XML verlinke, kann ich davor mit xsl:choose prüfen, ob die Datei (auf die ich verlinke) überhaupt vorhanden ist?

Beispiel:

test1.xml:
------------------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test1.xsl"?>

<root>
 <links>
  <link1>test2.xml</link1>
 </links>
</root>
------------------------------------------------------------

test1.xsl:
------------------------------------------------------------
<?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" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
  <html>
   <head>
    <title>link</title>
   </head>
   <body>
    <xsl:element name="A">
     <xsl:attribute name="href">
      <xsl:value-of select="root/links/link1"/>
     </xsl:attribute>
     <xsl:value-of select="root/links/link1"/>
    </xsl:element>
   </body>
  </html>
 </xsl:template>
</xsl:stylesheet>
------------------------------------------------------------

test2.xml:
------------------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test2.xsl"?>

<root>
 <test>
  <text1>Das ist ein Test.</text1>
 </test>
</root>
------------------------------------------------------------

test2.xsl:
------------------------------------------------------------
<?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" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
  <html>
   <head>
    <title>test</title>
   </head>
   <body>
    <xsl:value-of select="/root/test/text1"/>
   </body>
  </html>
 </xsl:template>
</xsl:stylesheet>
------------------------------------------------------------

Wenn man hier die test1.xml im Browser darstellt, ist die test2.xml verlinkt.
Kann ich in der test1.xsl prüfen, ob die Datei test2.xml überhaupt existiert? Falls sie nicht existiert, soll der Link nicht dargestellt werden.

Danke und Grüße
Cyberfuzzy
www.cyberfuzzy.com

  1. Zu viel Text!!!!!

    1. Zu viel Text!!!!!

      Wie? Was? Kann man das nicht mehr lesen?

  2. Hi Fuzzy,

    lies doch einfach einen Teil der gesuchten Datei und prüf dann den Wert.

    Den gesuchten Teil kriegst du mit der X-Path-Funktion document()

    Pseudocode:

    <xsl:if test="document(test2.xml)//text1!='' ">
    ...
    </xsl:if>

    Gruß, Dein Onkel

    1. Hallo,

      danke für die Hilfe.

      Ich habe es jetzt so versucht:

      <xsl:when test="document('test2.xml')/root/test/text1!=''">
       <xsl:value-of select="'gibts'"/>
      </xsl:when>
      xsl:otherwise
       <xsl:value-of select="'gibts nicht'"/>
      </xsl:otherwise>

      Wenn es die test2.xml gibt, dann bekomm ich auch ein "gibts". Wenn es die aber nicht gibt, dann bekomm ich ein "Die XML-Seite kann nicht angezeigt werden".
      Weißt du, was man da machen kann?

      Gruß
      Cyberfuzzy

  3. Hallo,

    wenn ich in einer XSL-Datei auf eine andere XML verlinke, kann ich davor mit xsl:choose prüfen, ob die Datei (auf die ich verlinke) überhaupt vorhanden ist?

    Nein. Nicht mit XSL, leider.

    Grüße
    Thomas

    1. Danke, gibts da sonst vielleicht noch eine Möglichkeit? Das soll clientseitig laufen.

    2. Oder wäre das noch eine Alternative:
      Wenn man auf einen Link klickt, bei dem die verlinkte Datei nicht vorhanden ist, dann zeigt der IE z. B. automatisch "Die XML-Seite kann nicht angezeigt werden" an.
      Kann man da standardmäßig per xsl auf eine andere Seite umleiten?

      1. Hallo,

        Oder wäre das noch eine Alternative:
        Wenn man auf einen Link klickt, bei dem die verlinkte Datei nicht vorhanden ist, dann zeigt der IE z. B. automatisch "Die XML-Seite kann nicht angezeigt werden" an.
        Kann man da standardmäßig per xsl auf eine andere Seite umleiten?

        Du kannst unter IE (aber auch unter Mozilla/NS) einiges mit JavaScript machen. Es gibt dazu von Thomas Meinike und auch von mir komplette Beispile im Archiv (sorry, ich möchte jetzt nicht selber danach suchen, aber es geht nur um das Jahr 2003).

        Ob du jetzt aber Einfluß auf die vom IE intern generierte Fehlerseite nehmen kannst, kann ich dir nicht sagen.

        Grüße
        Thomas