XSLT - parent:: Attribut bekommen - Wie?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • XSLT - parent:: Attribut bekommen - Wie?

    Hallo Leute,

    nachdem ich mich weiter in XPath eingelesen habe, bin ich mit meinem Problem weitergekommen. Jedoch hänge ich wiederum an einem Punkt fest, wo ich wieder festhänge.
    Wie kann ich ein parent::Element/@Attribut bekommen, das "n" Elemente dazwischen haben kann?

    z.B. aktiver node ist "Object" der 4. Stufe.
    nun möchte ich ein Attribut der 1.Stufe aus (ElementName das Attribut "id") haben.
    fix angegeben ist es "../../../ElementName/@id"
    Wie kann ich es aber dynamisch angeben? z.B. möchte ich bei den gefundenen nodes (durch XPath Abfrage) dieses Attribut haben. Die Ergebnismenge ist jedoch in unterschiedlichen Stufen und somit ist eine feste Angabe nicht möglich.
    Versucht habe ich schon "../*/ElementName/@id", jedoch ohne Erfolg.
    auch habe ich versucht "parent::ElementName/@id"

    Hat jemand eine Idee oder Tipps, wo ich mich diesbezüglich einlesen kann (ich google schon ständig).

    Viele Grüße

    Armin
  • XML Dokument und XSLT

    Damit es leichter zu beantworten geht, anbei ein XML Dokument und das passende XSLT Stylesheet.

    Die Abfrage mit XPath lautet "//*/Frame".
    Durch diese Abfrage habe ich die passenden Daten die ich mit for-each select im XSLT abarbeite.
    <xsl:for-each select="//*/Frame">
    Jedoch benötige ich die @id aus Window. Da die Anzahl der Elemente bis "Window" unterschiedlich lang sind, kann ich keine feste Angaben wie ../../@id machen. Daher benötige ich eine dynamische Lösung, die unabhängig von den jeweiligen Strukturtiefen, die @id aus dem Element "Window" mitnehmen kann.
    Mit festen Angaben ../../../@id funktioniert es, jedoch nur auf wirklichen passenden Tiefe der Verschachtelung. Andere Stufen nehmen die @id nicht mit.

    Quellcode

    1. <?xml version="1.0" encoding="UTF-16"?>
    2. <Report link="DBreport.xml" type="Report" version="8" creationDate="19.06.2006"
    3. creationTime="23:03:17">
    4. <WindowCatalog>
    5. <Window id="32769" name="xyz1">
    6. <FrameCatalog>
    7. <!-- Standard Baum -->
    8. <Frame id="27" name="xID" dataType="Number" fieldType="Normal">
    9. <Serial increment="1" nextValue="2"/>
    10. <Storage index="None"/>
    11. </Frame>
    12. <Frame id="28" name="xName" dataType="Text" fieldType="Normal">
    13. <Serial/>
    14. <Storage index="None"/>
    15. </Frame>
    16. <!-- verschachtelter Baum -->
    17. <Frame id="29" name="Name1" dataType="Text" fieldType="Normal">
    18. <Serial/>
    19. <Storage index="None"/>
    20. <Frame id="3111" name="Name102" dataType="Text" fieldType="Normal">
    21. <Serial/>
    22. <Storage index="None"/>
    23. <Frame id="59876" name="Name_v33" dataType="Text" fieldType="Normal">
    24. <Serial/>
    25. <Storage index="None"/>
    26. </Frame>
    27. <Frame id="59877" name="Name_v34" dataType="Text" fieldType="Normal">
    28. <Serial/>
    29. <Storage index="None"/>
    30. </Frame>
    31. <Frame id="59876" name="Name_v35" dataType="Text" fieldType="Normal">
    32. <Serial/>
    33. <Storage index="None"/>
    34. <Frame id="786534" name="nVerschachtelungen" dataType="Text"
    35. fieldType="Normal">
    36. <Serial/>
    37. <Storage index="None"/>
    38. </Frame>
    39. </Frame>
    40. </Frame>
    41. </Frame>
    42. </FrameCatalog>
    43. </Window>
    44. </WindowCatalog>
    45. </Report>
    Alles anzeigen




    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3. <xsl:template match="/*">
    4. <xsl:attribute name="FOUND"/>
    5. <xsl:for-each select="//*/Frame">
    6. <ROW MODID="0" RECORDID="0">
    7. <COL>
    8. <DATA>
    9. <!-- Hier ist das Problem - Wie bekomme ich die Window/@id? -->
    10. <xsl:value-of select="../../../../../../../../../@id"/>
    11. </DATA>
    12. </COL>
    13. <COL>
    14. <DATA>
    15. <xsl:value-of select="."/>
    16. </DATA>
    17. </COL>
    18. <COL>
    19. <DATA>
    20. <xsl:value-of select="@id/>
    21. </DATA>
    22. </COL>
    23. <COL>
    24. <DATA>
    25. <xsl:value-of select="@name"/>
    26. </DATA>
    27. </COL>
    28. <COL>
    29. <DATA>
    30. <xsl:value-of select="Storage/@index"/>
    31. </DATA>
    32. </COL>
    33. <COL>
    34. <DATA>
    35. <xsl:value-of select="Serial/@increment"/>
    36. </DATA>
    37. </COL>
    38. <COL>
    39. <DATA>
    40. <xsl:value-of select="Serial/@nextValue"/>
    41. </DATA>
    42. </COL>
    43. </ROW>
    44. </xsl:for-each>
    45. </xsl:template>
    46. </xsl:stylesheet>
    Alles anzeigen