Nils W.: XML + DOCTYPE mit XSL verarbeiten...

Hallo zusammen,

ich habe eine XML-Datei, in der ein DOCTYPE eingetragen ist:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE BMECAT SYSTEM "bmecat_2005_tnc.dtd">  
<BMECAT version="2005">  
 <HEADER>  
  <CATALOG>  
...  
  </CATALOG>  
...  
 </HEADER>  
 <T_NEW_CATALOG>  
  <CLASSIFICATION_SYSTEM>  
   <CLASSIFICATION_SYSTEM_NAME>udf_PRODUCTCATALOG1.0</CLASSIFICATION_SYSTEM_NAME>  
   <CLASSIFICATION_GROUPS>  
    <CLASSIFICATION_GROUP type="node">  
         <CLASSIFICATION_GROUP type="node">  
     <CLASSIFICATION_GROUP_ID>0</CLASSIFICATION_GROUP_ID>  
     <CLASSIFICATION_GROUP_NAME lang="deu">Produktkatalog</CLASSIFICATION_GROUP_NAME>  
    </CLASSIFICATION_GROUP>  
    <CLASSIFICATION_GROUP type="node">  
     <CLASSIFICATION_GROUP_ID>1</CLASSIFICATION_GROUP_ID>  
     <CLASSIFICATION_GROUP_NAME lang="deu">Pfad 1</CLASSIFICATION_GROUP_NAME>  
     <CLASSIFICATION_GROUP_PARENT_ID>0</CLASSIFICATION_GROUP_PARENT_ID>  
    </CLASSIFICATION_GROUP>  
    <CLASSIFICATION_GROUP type="node">  
     <CLASSIFICATION_GROUP_ID>2</CLASSIFICATION_GROUP_ID>  
     <CLASSIFICATION_GROUP_NAME lang="deu">Pfad 1.1</CLASSIFICATION_GROUP_NAME>  
     <CLASSIFICATION_GROUP_PARENT_ID>1</CLASSIFICATION_GROUP_PARENT_ID>  
    </CLASSIFICATION_GROUP>  
    <CLASSIFICATION_GROUP type="node">  
     <CLASSIFICATION_GROUP_ID>3</CLASSIFICATION_GROUP_ID>  
     <CLASSIFICATION_GROUP_NAME lang="deu">Pfad 1.1.1</CLASSIFICATION_GROUP_NAME>  
     <CLASSIFICATION_GROUP_PARENT_ID>2</CLASSIFICATION_GROUP_PARENT_ID>  
    </CLASSIFICATION_GROUP>  
    <CLASSIFICATION_GROUP type="leaf">  
     <CLASSIFICATION_GROUP_ID>4</CLASSIFICATION_GROUP_ID>  
     <CLASSIFICATION_GROUP_NAME lang="deu">Produkt</CLASSIFICATION_GROUP_NAME>  
     <CLASSIFICATION_GROUP_PARENT_ID>3</CLASSIFICATION_GROUP_PARENT_ID>  
    </CLASSIFICATION_GROUP>  
...  
   </CLASSIFICATION_GROUPS>  
  </CLASSIFICATION_SYSTEM>  
  <PRODUCT>  
...  
  </PRODUCT>  
 </T_NEW_CATALOG>  
</BMECAT>  

Jetzt möchte ich mit einer XSL-Datei Daten in eine Text-Datei exportieren. Das klappt auch ganz gut, wenn ich die DOCTYPE-Zeile auskommentiere:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
 <xsl:output method="text" indent="no"/>  
 <xsl:strip-space elements="*"/>  
  
 <xsl:template match="/">  
  <xsl:for-each select="/BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS">  
   <xsl:apply-templates select="CLASSIFICATION_GROUP"/>  
  </xsl:for-each>  
 </xsl:template>  
  
 <xsl:template match="CLASSIFICATION_GROUP">  
  <xsl:if test="@type='leaf'">  
   <xsl:call-template name="rekursiv_class_group_leaf">  
    <xsl:with-param name="parentID" select="CLASSIFICATION_GROUP_PARENT_ID"/>  
    <xsl:with-param name="lang" select="CLASSIFICATION_GROUP_NAME/@lang"/>  
   </xsl:call-template>  
  </xsl:if>  
 </xsl:template>  
 <xsl:template name="rekursiv_class_group_leaf">  
  <xsl:param name="parentID"/>  
  <xsl:param name="lang"/>  
  <xsl:call-template name="rekursiv_class_group_node">  
   <xsl:with-param name="parentID" select="CLASSIFICATION_GROUP_PARENT_ID"/>  
   <xsl:with-param name="lang" select="CLASSIFICATION_GROUP_NAME/@lang"/>  
  </xsl:call-template>  
  <xsl:text>/</xsl:text>  
  <xsl:value-of select="CLASSIFICATION_GROUP_NAME"/>  
  <xsl:text> - </xsl:text>  
  <xsl:value-of select="CLASSIFICATION_GROUP_ID"/>  
  <xsl:text>&#13;&#10;</xsl:text>  
 </xsl:template>  
 <xsl:template name="rekursiv_class_group_node">  
  <xsl:param name="parentID"/>  
  <xsl:param name="lang"/>  
  <xsl:for-each select="../CLASSIFICATION_GROUP">  
   <xsl:if test="CLASSIFICATION_GROUP_ID=$parentID">  
    <xsl:if test="CLASSIFICATION_GROUP_NAME/@lang=$lang">  
     <xsl:call-template name="rekursiv_class_group_node">  
      <xsl:with-param name="parentID" select="CLASSIFICATION_GROUP_PARENT_ID"/>  
      <xsl:with-param name="lang" select="$lang"/>  
     </xsl:call-template>  
     <xsl:if test="CLASSIFICATION_GROUP_PARENT_ID">/</xsl:if>  
     <xsl:value-of select="CLASSIFICATION_GROUP_NAME"/>  
    </xsl:if>  
   </xsl:if>  
  </xsl:for-each>  
 </xsl:template>  
</xsl:stylesheet>  

Wie zu sehen sein sollte, ich brauche nur die Daten aus einem Abschnitt:
/BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS

Und da dort ein Baum hinterlegt ist, möchte ich den kompletten Pfad über die Knoten ("node") bis zum Blatt ("leaf") haben.

Kann mir jemand dabei helfen, wie ich die Zeile

<xsl:for-each select="/BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS">  

ändern muß, damit das klappt? Irgendwie stehe ich auf dem Schlauch. Oder muß ich ein weiteres Template erstellen? Das habe ich zwar schon versucht, war aber recht erfolglos.

Gruß, Nils.

  1. Sorry,

    aber du beschreibst es etwas konfus. Ist der leaf der letzte knoten oder koennen danach auch noch knoten mit attribute "node" kommen und sollen diese eingeschlossen werden?

    Ansonsten beschraenkte doch einfach per Xpath deine for-each anweisung.

      
      
    <xsl:for-each select="/BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS[@type = 'node']">  
      
    .  
    .  
    .  
    </xsl:for-each>  
      
    
    
    1. Hallo Holger,

      es können noch weitere "node"- und "leaf"-Einträge kommen.

      Und, wie gesagt, wenn ich in der XML-Datei die DOCTYPE-Zeile auskommentiere, dann klappt das auch.

      Der Tipp mit
      <xsl:for-each select="/BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS[@type = 'node']">
      ist gut. Damit kann ich das auch noch etas vereinfachen (ich selektiere nur die "leaf"'s). Aber mein Problem liegt im Moment halt bei dem DOCTYPE-Eintrag. Damit will's nicht klappen. :-(

      Gruß, Nils.

      Sorry,

      aber du beschreibst es etwas konfus. Ist der leaf der letzte knoten oder koennen danach auch noch knoten mit attribute "node" kommen und sollen diese eingeschlossen werden?

      Ansonsten beschraenkte doch einfach per Xpath deine for-each anweisung.

      <xsl:for-each select="/BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS[@type = 'node']">

      .
      .
      .
      </xsl:for-each>

      
      >   
      > 
      
      1. Das eine, hat aber mit dem anderen nicht zu tun.

        Der DocType Eintrag gibt nur das hinterlegte Schema vor. Ich vermute mal du benutzt einen Parser, der nach dem DocType schaut und da er die Datei nicht findet entsprechend abbricht?

        Gruus, H.

        1. Hallo Holger,

          Das eine, hat aber mit dem anderen nicht zu tun.

          Der DocType Eintrag gibt nur das hinterlegte Schema vor. Ich vermute mal du benutzt einen Parser, der nach dem DocType schaut und da er die Datei nicht findet entsprechend abbricht?

          Nein, die Datei ist da, es kommt auch keine Fehlermeldung. Und wenn ich mir mit

           <xsl:template match="/">  
            <xsl:value-of select="name(node())"/><xsl:text>&#13;&#10;</xsl:text>  
            <xsl:for-each select="/BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS">  
             <xsl:apply-templates select="CLASSIFICATION_GROUP"/>  
            </xsl:for-each>  
           </xsl:template>  
          
          

          den Namen des aktuellen Root-Knotens ausgeben lasse, dann wird nur
             BMECAT
          ausgegeben. Mein Problem besteht darin, daß die for-each-Schleife bei aktiver DOCTYPE-Zeile nichts mehr findet. Leider verstehe ich den Grund dafür nicht.

          Ich kann den Namen der DTD ändern, dann meldet mir der Editor einen Fehler. Ich transformiere mit Xalan unter Windows...

          Wenn ich die Dateien mit Xalan prüfen lasse, bekomme ich folgende Meldung:
          Warning.Occurred at file BMECatneu.xml, line 2, column 47. Element 'CUSTOMS_TARI
          FF_NUMBERS' was referenced in a content model but never declared

          Warning.Occurred at file BMECatneu.xml, line 2, column 47. Element 'FT_GROUPNAME
          ' was referenced in a content model but never declared
          (mit aktiver DOCTYPE-Zeile). Da das aber "nur" Warnungen sind, habe ich da nocht nichts weiter unternommen. Kann dort der Hunde begraben liegen?

          Danke und Gruß, Nils.

          1. Hallo,

            Nein, die Datei ist da, es kommt auch keine Fehlermeldung. Und wenn ich mir mit

            <xsl:template match="/">

            <xsl:value-of select="name(node())"/>xsl:text&#13;&#10;</xsl:text>

            
            > den Namen des aktuellen Root-Knotens ausgeben lasse, dann wird nur  
            >    BMECAT  
            > ausgegeben.  
              
            was korrekt ist, da BMECAT das Wurzelelement  des XML ist.  
              
            
            > Mein Problem besteht darin, daß die for-each-Schleife bei aktiver DOCTYPE-Zeile nichts mehr findet. Leider verstehe ich den Grund dafür nicht.  
            >   
            > Ich kann den Namen der DTD ändern, dann meldet mir der Editor einen Fehler. Ich transformiere mit Xalan unter Windows...  
            >   
            > Wenn ich die Dateien mit Xalan prüfen lasse, bekomme ich folgende Meldung:  
            > Warning.Occurred at file BMECatneu.xml, line 2, column 47. Element 'CUSTOMS\_TARI  
            > FF\_NUMBERS' was referenced in a content model but never declared  
            >   
            > Warning.Occurred at file BMECatneu.xml, line 2, column 47. Element 'FT\_GROUPNAME  
            > ' was referenced in a content model but never declared  
            > (mit aktiver DOCTYPE-Zeile).  
              
             Da das aber "nur" Warnungen sind, habe ich da nocht nichts weiter unternommen. Kann dort der Hunde begraben liegen?  
            
            >   
              
            Die Warnungen in dem Fall sind ernst zu nehmen, denn du hast in deinem XML Elemente, die in der DTD nicht definiert sind. Das wiederum führ den Sinn von der DTD ad absurdum.  
            Du kannst Xalan mit den Option »» -EDUMP fehler.txt «« und/oder wenn du die Java-Version nutzt mit den Optionen »»  -TT -TG -TS -TTC «« aufrufen.  
              
            Grüße  
            Thomas  
            
            
            1. Hallo Thomas,

              Hallo,

              Nein, die Datei ist da, es kommt auch keine Fehlermeldung. Und wenn ich mir mit

              <xsl:template match="/">

              <xsl:value-of select="name(node())"/>xsl:text&#13;&#10;</xsl:text>

              
              > > den Namen des aktuellen Root-Knotens ausgeben lasse, dann wird nur  
              > >    BMECAT  
              > > ausgegeben.  
              >   
              > was korrekt ist, da BMECAT das Wurzelelement  des XML ist.  
              
              Ok.  
                
                
              
              > > Mein Problem besteht darin, daß die for-each-Schleife bei aktiver DOCTYPE-Zeile nichts mehr findet. Leider verstehe ich den Grund dafür nicht.  
              > >   
              > > Ich kann den Namen der DTD ändern, dann meldet mir der Editor einen Fehler. Ich transformiere mit Xalan unter Windows...  
              > >   
              > > Wenn ich die Dateien mit Xalan prüfen lasse, bekomme ich folgende Meldung:  
              > > Warning.Occurred at file BMECatneu.xml, line 2, column 47. Element 'CUSTOMS\_TARIFF\_NUMBERS' was referenced in a content model but never declared  
              > >   
              > > Warning.Occurred at file BMECatneu.xml, line 2, column 47. Element 'FT\_GROUPNAME' was referenced in a content model but never declared  
              > > (mit aktiver DOCTYPE-Zeile).  
              >   
              >  Da das aber "nur" Warnungen sind, habe ich da nocht nichts weiter unternommen. Kann dort der Hunde begraben liegen?  
              > >   
              >   
              > Die Warnungen in dem Fall sind ernst zu nehmen, denn du hast in deinem XML Elemente, die in der DTD nicht definiert sind. Das wiederum führ den Sinn von der DTD ad absurdum.  
              
              Ich habe keine der beiden Elemente aus der Warnung in der XML-Datei, der Fehler liegt wohl an der DTD selbst. Dort werden diese beiden Elemente verwendet, ohne daß sie definiert wurden.  
                
              Ich werde mal die DTD dementsprechend anpassen, daß sie in dieser Hinsicht valide ist. Vielleicht hilft das ja weiter.  
                
                
              
              > Du kannst Xalan mit den Option »» -EDUMP fehler.txt «« und/oder wenn du die Java-Version nutzt mit den Optionen »»  -TT -TG -TS -TTC «« aufrufen.  
              
              Ich nutze die Windows-Version 1.10.0 von Xalan und v2.7.0 von Xerces. Den Parameter -EDUMP kann ich leider nicht verwenden, da dieser nicht unterstützt wird.  
                
              Danke und Gruß, Nils.
              
              1. Hallo,

                Wenn ich die Dateien mit Xalan prüfen lasse, bekomme ich folgende Meldung:
                Warning.Occurred at file BMECatneu.xml, line 2, column 47. Element 'CUSTOMS_TARIFF_NUMBERS' was referenced in a content model but never declared

                Warning.Occurred at file BMECatneu.xml, line 2, column 47. Element 'FT_GROUPNAME' was referenced in a content model but never declared
                (mit aktiver DOCTYPE-Zeile).

                Da das aber "nur" Warnungen sind, habe ich da nocht nichts weiter unternommen. Kann dort der Hunde begraben liegen?

                Die Warnungen in dem Fall sind ernst zu nehmen, denn du hast in deinem XML Elemente, die in der DTD nicht definiert sind. Das wiederum führ den Sinn von der DTD ad absurdum.
                Ich habe keine der beiden Elemente aus der Warnung in der XML-Datei, der Fehler liegt wohl an der DTD selbst. Dort werden diese beiden Elemente verwendet, ohne daß sie definiert wurden.

                Ich werde mal die DTD dementsprechend anpassen, daß sie in dieser Hinsicht valide ist. Vielleicht hilft das ja weiter.

                Die Warnungen habe ich jetzt nicht mehr, aber funktionieren tut das Ganze trotzdem nicht. :-(

                Gruß, Nils.

                1. Schon wieder ich...

                  jetzt habe ich mal die Java-Verison von Xalan (2.7.1) verwendet. Der Aufruf:
                  java -jar d:\xalan-j_2_7_1-bin\xalan.jar -TT -TG -TS -TTC -IN BMECatneu.xml -XSL BMECat.xsl

                  liefert:

                  file:///BMECat.xsl Line #6, Column #26: template match='/'  
                  file:///BMECat.xsl Line #10, Column #128: for-each  
                  Selected source node '#document', at file 'file:///BMECatneu.xml', line #-1, column #-1  
                  file:///BMECat.xsl Line #10, Column #128: for-each, select='BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS/CLASSIFICATION_GROUP[@type = 'leaf']':  
                       [empty node list]  
                  STARTDOCUMENT  
                  ENDDOCUMENT
                  

                  Die Datei BMECat.xsl habe ich etwas überarbeitet, das Ergebnis bleibt aber immer noch das selbe:

                  <?xml version="1.0" encoding="UTF-8"?>  
                  <!-- <?xml version="1.0" encoding="ISO-8859-1"?> -->  
                  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
                   <xsl:output method="text" indent="yes"/>  
                   <xsl:strip-space elements="*"/>  
                   <xsl:template match="/">  
                    <!--  <xsl:text>root: #</xsl:text>  
                    <xsl:value-of select="name(node())"/>  
                    <xsl:text>#&#13;&#10;</xsl:text> -->  
                    <xsl:for-each select="BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS/CLASSIFICATION_GROUP[@type = 'leaf']">  
                     <!--   <xsl:value-of select="name(node())"/>  
                     <xsl:text>#&#13;&#10;</xsl:text> -->  
                    <xsl:call-template name="rekursiv_class_group_node">  
                     <xsl:with-param name="parentID" select="CLASSIFICATION_GROUP_PARENT_ID"/>  
                     <xsl:with-param name="lang" select="CLASSIFICATION_GROUP_NAME/@lang"/>  
                    </xsl:call-template>  
                    <xsl:text>/</xsl:text>  
                    <xsl:value-of select="CLASSIFICATION_GROUP_NAME"/>  
                    <xsl:text> - </xsl:text>  
                    <xsl:value-of select="CLASSIFICATION_GROUP_ID"/>  
                    <xsl:text>&#13;&#10;</xsl:text>  
                    </xsl:for-each>  
                   </xsl:template>  
                   <xsl:template name="rekursiv_class_group_node">  
                    <xsl:param name="parentID"/>  
                    <xsl:param name="lang"/>  
                    <xsl:for-each select="../CLASSIFICATION_GROUP">  
                      <xsl:if test="CLASSIFICATION_GROUP_ID=$parentID">  
                       <xsl:if test="CLASSIFICATION_GROUP_NAME/@lang=$lang">  
                        <xsl:call-template name="rekursiv_class_group_node">  
                         <xsl:with-param name="parentID" select="CLASSIFICATION_GROUP_PARENT_ID"/>  
                         <xsl:with-param name="lang" select="$lang"/>  
                        </xsl:call-template>  
                        <xsl:if test="CLASSIFICATION_GROUP_PARENT_ID">/</xsl:if>  
                        <xsl:value-of select="CLASSIFICATION_GROUP_NAME"/>  
                       </xsl:if>  
                      </xsl:if>  
                    </xsl:for-each>  
                   </xsl:template>  
                  </xsl:stylesheet>  
                  
                  

                  Irgendwie verstehe ich nicht, warum bei aktiver DOCTYPE-Zeile das Ding nicht laufen will. Da muß doch irgend etwas mit dem Schema krumm sein, oder?

                  Gruß, Nils.

                  1. Hallo,

                    jetzt habe ich mal die Java-Verison von Xalan (2.7.1) verwendet. Der Aufruf:
                    java -jar d:\xalan-j_2_7_1-bin\xalan.jar -TT -TG -TS -TTC -IN BMECatneu.xml -XSL BMECat.xsl

                    file:///BMECat.xsl Line #10, Column #128: for-each, select='BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS/CLASSIFICATION_GROUP[@type = 'leaf']':
                         [empty node list]
                    STARTDOCUMENT
                    ENDDOCUMENT

                    Jetzt habe ich das XML aus dem ersten Posting genauer angesehen:

                    <xsl:for-each select="BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS/CLASSIFICATION_GROUP[@type = 'leaf']">

                    Wenn ich das richtig sehe, muss das zwangsläufig zum [empty node list] führen, denn dein XML sieht so aus:

                      
                    <BMECAT version="2005">  
                     <T_NEW_CATALOG>  
                      <CLASSIFICATION_SYSTEM>  
                       <CLASSIFICATION_SYSTEM_NAME>udf_PRODUCTCATALOG1.0</CLASSIFICATION_SYSTEM_NAME>  
                       <CLASSIFICATION_GROUPS>  
                        <CLASSIFICATION_GROUP type="node">  
                         <CLASSIFICATION_GROUP type="node">  
                    
                    

                    erst in der zweiten CLASSIFICATION_GROUP ebene würde ein type="leaf" geben.

                    Ich kann jedenfalls anhand des XMLs und XSLs nicht anderes sagen. (Und auch wenn ich anhand des XMLs eine DTD generierte und die Transformation ausführte, komme ich zu keinem anderen Ergebnis)
                    Vielleicht kannst du die Dateien irgendwo hochladen?

                    Grüße
                    Thomas

                    1. Hallo Thomas,

                      das mit dem Hochladen ist leider so eine Sache, da muß ich erst mal schauen, welche Daten so ins Internet dürfen. Auch wenn es ein offener Katalog ist, könnten da Daten drin enthalten sein, die so nicht raus sollten.

                      Wie auch immer, im ersten Beitrag ist der unterste Abschnitt ein "leaf"-Objekt, und die Abfrage funktioniert auch, wenn ich die Zeile mit DOCTYPE auskommentiere. Und genau da liegt mein Problem, ich verstehe das nicht. DOCTYPE inaktiv - die Abfrage funktioniert, DOCTYPE aktiv, die Abfrage funktioniert nicht. Ich habe jetzt auch noch eine Test-DTD erstellt, die auf das notwendige Minimum reduziert ist, aber daran liegt es auch nicht.

                      Gruß, Nils.

                      Hallo,

                      jetzt habe ich mal die Java-Verison von Xalan (2.7.1) verwendet. Der Aufruf:
                      java -jar d:\xalan-j_2_7_1-bin\xalan.jar -TT -TG -TS -TTC -IN BMECatneu.xml -XSL BMECat.xsl

                      file:///BMECat.xsl Line #10, Column #128: for-each, select='BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS/CLASSIFICATION_GROUP[@type = 'leaf']':
                           [empty node list]
                      STARTDOCUMENT
                      ENDDOCUMENT

                      Jetzt habe ich das XML aus dem ersten Posting genauer angesehen:

                      <xsl:for-each select="BMECAT/T_NEW_CATALOG/CLASSIFICATION_SYSTEM/CLASSIFICATION_GROUPS/CLASSIFICATION_GROUP[@type = 'leaf']">

                      Wenn ich das richtig sehe, muss das zwangsläufig zum [empty node list] führen, denn dein XML sieht so aus:

                      <BMECAT version="2005">
                      <T_NEW_CATALOG>
                        <CLASSIFICATION_SYSTEM>
                         <CLASSIFICATION_SYSTEM_NAME>udf_PRODUCTCATALOG1.0</CLASSIFICATION_SYSTEM_NAME>
                         <CLASSIFICATION_GROUPS>
                          <CLASSIFICATION_GROUP type="node">
                           <CLASSIFICATION_GROUP type="node">

                      
                      >   
                      > erst in der zweiten CLASSIFICATION\_GROUP ebene würde ein type="leaf" geben.  
                      >   
                      > Ich kann jedenfalls anhand des XMLs und XSLs nicht anderes sagen. (Und auch wenn ich anhand des XMLs eine DTD generierte und die Transformation ausführte, komme ich zu keinem anderen Ergebnis)  
                      > Vielleicht kannst du die Dateien irgendwo hochladen?  
                      >   
                      > Grüße  
                      > Thomas
                      
                      1. Hallo,

                        das mit dem Hochladen ist leider so eine Sache,

                        Verstehe, ich habe mir das schon gedacht.

                        Wie auch immer, im ersten Beitrag ist der unterste Abschnitt ein "leaf"-Objekt, und die Abfrage funktioniert auch, wenn ich die Zeile mit DOCTYPE auskommentiere. Und genau da liegt mein Problem, ich verstehe das nicht. DOCTYPE inaktiv - die Abfrage funktioniert, DOCTYPE aktiv, die Abfrage funktioniert nicht. Ich habe jetzt auch noch eine Test-DTD erstellt, die auf das notwendige Minimum reduziert ist, aber daran liegt es auch nicht.

                        Verstehe ich in dem Fall auch nicht und ich kann es bei mir, mit den von mir erstellten Dateien nicht nachvollziehen.

                        Grüße
                        Thomas

                        ps: als Ausnahme, vielleicht per Mail.

                        1. Danke an Thomas,

                          das Problem lag / liegt an der DTD. Dort wird ein Default-Namensraum deklariert, mit dem die Parse Probleme haben.

                          Schnelle Abhilfe schafft das Löschen.

                          Gruß, Nils.