sascha: XML Daten ausgeben

Hallo Leute,

ich stehe mal wieder auf dem schlauch. Ich hoffe einer Von euch kann mir auf die Sprünge helfen.

Ich habe folgende XML Datei:
<aenderungen xmlns="(9BC9626D-56D2-4759-92A4-053D90AB0673)">
 <gemeinde id="37" art="0" zugeordnetZu="15">
  <ort>Berlin</ort>
 </gemeinde>
 <meldebehoerde id="15" art="1" zugeordnetZu="1">
  <name>Berlin - Einwohnermeldeamt</name>
 </meldebehoerde>
 <rechenzentrum id="1" art="2">
  <name>Mannheim</name>
 </rechenzentrum>
 <person>
  <alt ags="37" id="6628" datum="2007-01-03T23:00:00.000+01:00">
  <neu ags="37" id="6628" datum="2007-01-05T23:00:00.000+01:00">
 </person>
 <person>
  <alt ags="37" id="6629" datum="2007-01-03T23:00:00.000+01:00">
  <neu ags="37" id="6629" datum="2007-01-05T23:00:00.000+01:00">
 </person>
 ...
</aenderungen>

ich möchte nun mit einer einfachen for each Schleife
mir alle Personen anzeigen lassen.

Mein Problem ist folgendes
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 <xsl:output method="xhtml" version="1.0" encoding="UTF-8" indent="yes"/>
 <xsl:template match="/">
  <html>
   <head>
    <title>Ausgabe</title>
   </head>
   <body>
    <xsl:for-each select="//person">
     test</ br>
    </xsl:for-each>
   </body>
  </html>
 </xsl:template>
</xsl:stylesheet>

mit diesen Stylesheet erwarte ich eigentlich die Ausgabe von dem Wort "Test" so oft wie es Personen gibt. Es wird mir aber der Komplette Inhalt der XML Daten ausgeben.
Ich hatte dieses Problem schon einmal. Allerdings lag es damals am Namespace der nicht in der XSL bekannt war.
Bei der XML Datei liegt das Schema zwar vor, aber selbst wenn ich es einbinde passiert nichts.
Kann ich auch ohne Schema auf die Elemente zugreifen?

  1. Hi,

    <aenderungen xmlns="(9BC9626D-56D2-4759-92A4-053D90AB0673)">

    "Ich rieche, rieche Menschenfleisch!"
    -- Satan

    Wenn mich mein Gedächtnis nicht trügt, ist das xmlns-Attribut in XML reserviert und muss eine URI enthalten. Obiger Wert ist weder eine URL noch ein URN, damit dürfte das XML invalide sein.

    <xsl:for-each select="//person">
         test</ br>
        </xsl:for-each>

    Ähnliches gilt für Dein XSLT: "</ br>" macht den Code invalide.

    mit diesen Stylesheet erwarte ich eigentlich die Ausgabe von dem Wort "Test" so oft wie es Personen gibt. Es wird mir aber der Komplette Inhalt der XML Daten ausgeben.

    Ich bin verwirrt, dass es überhaupt eine Ausgabe gibt. Möglicherweise stimmt aber auch die Verknüpfung des XML mit dem XSLT nicht; wie findet diese statt?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo Sascha,

    ...
      <alt ags="37" id="6628" datum="2007-01-03T23:00:00.000+01:00">
      <neu ags="37" id="6628" datum="2007-01-05T23:00:00.000+01:00">
    ...

    Elemente nicht abgeschlossen (/>)!

    ...
      <alt ags="37" id="6629" datum="2007-01-03T23:00:00.000+01:00">
      <neu ags="37" id="6629" datum="2007-01-05T23:00:00.000+01:00">
    ...

    Elemente nicht abgeschlossen (/>)!

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    Hier fehlrt ein >-Zeichen!

    <body>
        <xsl:for-each select="//person">
         test</ br>
        </xsl:for-each>

    </ br> --> <br />

    Hinzu kommt der im XSLT-Stylesheet abwesende Namensraum, der wie von Cheatah schon bemerkt zumindest "anrüchig" ist (keine URI-Notation, wird aber von Parsern gern nicht so streng gesehen). So funktioniert die Transformation damit aber dennoch (getestet mit Saxon 9.0B):

    <?xml version="1.0" encoding="UTF-8"?>  
    <xsl:stylesheet version="2.0"  
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
      xmlns:xs="http://www.w3.org/2001/XMLSchema"  
      xmlns:fn="http://www.w3.org/2005/xpath-functions"  
      xpath-default-namespace="(9BC9626D-56D2-4759-92A4-053D90AB0673)">  
     <xsl:output method="xhtml" version="1.0" encoding="UTF-8" indent="yes"/>  
     <xsl:template match="/">  
      <html>  
       <head>  
        <title>Ausgabe</title>  
       </head>  
       <body>  
        <xsl:for-each select="//person">  
         test<br />  
        </xsl:for-each>  
       </body>  
      </html>  
     </xsl:template>  
    </xsl:stylesheet>
    

    BTW: Die fo- und xsi-Namensräume werden in dieser Konstellation nicht im XSLT-Stylesheet benötigt.

    Grüße,
    Thomas

    1. Sorry für die Unsaubere Schreibweise!

      Aber danke das hat sehr geholfen.