I.Tacker: Hierarchie flach legen

Hallo,

ich bin absoluter Neuling und muss eine XML-Datei als Textdatei ausgeben.
Der Input sieht so aus

<Folder>
<Name>Alpha</Name>
<Berechtigung>
<Name>Otto</Name>
<Typ>read</Typ>
</Berechtigung>
<Berechtigung>
<Name>Willi</Name>
<Typ>none</Typ>
</Berechtigung>
...
</Folder>
<Folder>
<Name>Test</Name>
<Berechtigung>
<Name>Anna</Name>
<Typ>read/write</Typ>
</Berechtigung>
<Berechtigung>
<Name>Willi</Name>
<Typ>none</Typ>
</Berechtigung>
</Folder>
...

herauskommen soll etwas in der Art

Folder    Berechtigung
Alpha     Otto                   read
Alpha     Willi                  none
...
Test      Anna                   read/write
Test      Willi                  none
...

Wäre froh, wenn mir jemand auf die Spünge helfen könnte.

Grüße
I.Tacker

  1. Hallo I.Tacker,

    herauskommen soll etwas in der Art

    Folder    Berechtigung
    Alpha     Otto                   read
    Alpha     Willi                  none
    ...
    Test      Anna                   read/write
    Test      Willi                  none
    ...

    Über die Berechtigungen lässt sich das Ziel so erreichen (Tabs und Umbrüche ggf. anpassen):

    <?xml version="1.0" encoding="UTF-8"?>  
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
      
      <xsl:output method="text" encoding="UTF-8"/>  
      
      <xsl:template match="/">  
        <xsl:text>Folder&#x9;Berechtigung&#xA;</xsl:text>  
        <xsl:apply-templates select="//Berechtigung"/>  
      </xsl:template>  
      
      <xsl:template match="Berechtigung">  
        <xsl:value-of select="preceding-sibling::Name"/><xsl:text>&#x9;</xsl:text>  
        <xsl:value-of select="Name"/><xsl:text>&#x9;&#x9;</xsl:text>  
        <xsl:value-of select="Typ"/>  
        <xsl:if test="position() != last()"><xsl:text>&#xA;</xsl:text></xsl:if>  
      </xsl:template>  
      
    </xsl:stylesheet>
    

    Ergebnis:

    Folder Berechtigung
    Alpha  Otto             read
    Alpha  Willi            none
    Test   Anna             read/write
    Test   Willi            none

    Grüße,
    Thomas

    1. Vielen Dank für die Unterstützung.
      Das Problem ist gelöst,

      I.Tacker

      Hallo I.Tacker,

      »» herauskommen soll etwas in der Art
      »»
      »» Folder    Berechtigung
      »» Alpha     Otto                   read
      »» Alpha     Willi                  none
      »» ...
      »» Test      Anna                   read/write
      »» Test      Willi                  none
      »» ...

      Über die Berechtigungen lässt sich das Ziel so erreichen (Tabs und Umbrüche ggf. anpassen):

      <?xml version="1.0" encoding="UTF-8"?>

      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:output method="text" encoding="UTF-8"/>

      <xsl:template match="/">
          xsl:textFolder&#x9;Berechtigung&#xA;</xsl:text>
          <xsl:apply-templates select="//Berechtigung"/>
        </xsl:template>

      <xsl:template match="Berechtigung">
          <xsl:value-of select="preceding-sibling::Name"/>xsl:text&#x9;</xsl:text>
          <xsl:value-of select="Name"/>xsl:text&#x9;&#x9;</xsl:text>
          <xsl:value-of select="Typ"/>
          <xsl:if test="position() != last()">xsl:text&#xA;</xsl:text></xsl:if>
        </xsl:template>

      </xsl:stylesheet>

      
      >   
      > Ergebnis:  
      >   
      > Folder Berechtigung  
      > Alpha  Otto             read  
      > Alpha  Willi            none  
      > Test   Anna             read/write  
      > Test   Willi            none  
      >   
      > Grüße,  
      > Thomas
      
  2. Hallo,

    ich bin absoluter Neuling und muss eine XML-Datei als Textdatei ausgeben.

    Wäre froh, wenn mir jemand auf die Spünge helfen könnte.

    Grüße
    I.Tacker

    Durch tab-Zeichen getrennt:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text"/>
    <xsl:template match="WurzelElementDesXMLs">
    xsl:textFolder&#x9;Berechtigung&#xA;</xsl:text>
    <xsl:for-each select="Folder">
    <xsl:variable name="fname" select="Name" />
    <xsl:for-each select="Berechtigung">
    <xsl:value-of select="$fname" />xsl:text&#x9;</xsl:text><xsl:value-of select="Name" />xsl:text&#x9;</xsl:text><xsl:value-of select="Typ" />xsl:text&#xA;</xsl:text>
    </xsl:for-each>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>

    Ausgabe:

      
    Folder	Berechtigung  
    Alpha	Otto	read  
    Alpha	Willi	none  
    Test	Anna	read/write  
    Test	Willi	none  
    
    

    Grüße
    Thomas