rekire: Wie findet man einen Node an einer beliebigen stelle?

Hi,

Ich habe eine für mich riesige XML-Datei mit über 250kb größe. In der es queerverweise gibt. Wenn ich es richtig verstanden habe sollte es irgendwie mit descendant-or-self gehen vom Wurzelnode ausgesehen, nur ich bekomme damit kein Ergebnis.

Die Struktur sieht in etwa so aus:

<root>  
 <punkt z:Id="0">Inhalt 1</punkt>  
 <a>  
  <b>  
   <c>  
    <punkt z:Id="2">Inhalt 2</punkt>  
    <b>  
     <a>  
      <f>  
       <punkt z:Id="3">Inhalt 3</punkt>  
      </f>  
     </a>  
    </b>  
   </c>  
  </b>  
 </a>  
 <punkt z:Ref="2" />  
 <punkt z:Ref="3" />  
 <punkt z:Id="4">Inhalt 4</punkt>  
</root>

Als transformiertes ergebnis hätte ich gerne sowas wie das hier:

<ul>  
 <li>Inhalt 1</li>  
 <li>Inhalt 2</li>  
 <li>Inhalt 3</li>  
 <li>Inhalt 4</li>  
</ul>

Leider bekomme ich aber nicht Inhalt 2+3 auf dem Bildschrim. Hat jemand einen Tipp für mich wie mein XPath aussehen muss damit es mir gelingt?

Gruß,
Rekire

--
sh:( fo:) ch:| rl:? br:^ n4:? ie:{ mo:} va:} de:> zu:| fl:{ ss:) ls:# js:)
  1. Hallo rekire,

    Leider bekomme ich aber nicht Inhalt 2+3 auf dem Bildschrim. Hat jemand einen Tipp für mich wie mein XPath aussehen muss damit es mir gelingt?

    Ansatz (im Beispiel fehlenden Namensraum testweise ergänzt sowie XSLT 1.0 angenommen und als XML ausgegeben):

    <?xml version="1.0" encoding="UTF-8"?>  
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
      xmlns:z="http://example.org/z" exclude-result-prefixes="z">  
      
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>  
      
      <xsl:template match="root">  
        <ul>  
          <xsl:apply-templates select="//punkt[@z:Id]"/>  
        </ul>  
      </xsl:template>  
      
      <xsl:template match="punkt[@z:Id]">  
        <li><xsl:value-of select="."/></li>  
      </xsl:template>  
      
    </xsl:stylesheet>
    

    Grüße,
    Thomas

    1. Hi Thomas,

      Mir war irgendwie entgangen, dass man auch bei apply-templates ein select angeben kann. Das klappt Perfekt! Herzlichen Dank!

      Gruß,
      Rekire

      --
      sh:( fo:) ch:| rl:? br:^ n4:? ie:{ mo:} va:} de:> zu:| fl:{ ss:) ls:# js:)