Announcement

Collapse
No announcement yet.

Newbie: XML to XML klingt einfach, scheint kompliziert

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Newbie: XML to XML klingt einfach, scheint kompliziert

    hallo,

    bin neu in diesem forum (und auch in XSLT) und würde mich sehr über jede hilfe freuen:

    folgendes ist das problem:

    will ein xml dokument mit ungefähr folgender struktur praktisch komplett übernehmen, also ein <xsl:copy-of select="*"/> ausser in dem fall, dass im Element "DisplayName" der String "xyz" steht und das element "entries" keine child elemnte enthält. dann soll unter diesem element ein child element "abc" angelegt werden.

    die struktur:
    <Result>
    <Element>
    <Category>
    <DisplayNames>
    <DisplayName>xyz</DisplayName>
    </DisplayNames>
    </Category>
    <CellContent>
    <Edit>
    <Dictionary>
    <Language>
    <Entries>
    </Entries>
    </Language>
    </Dictionary>
    </Edit>
    </CellContent>
    </Element>
    </Result>

    habe den ganzen tag mit dem stylesheet herumgespielt und bin total blockiert. ein paar kurze tipps zur logik mit einem kleinen code snippet würden mir wahrscheinlich schon auf die sprünge helfen.

    DANKE!

  • #2
    Verwende die sogenannte Identitäts-Transformation und schränke diese durch separate Templates weiter ein:

    Code:
    <xsl:template match="/">
      <xsl:apply-templates/>
    </xsl:template>
    
    
    <xsl:template match="node() | @*">
      <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
      </xsl:copy>
    </xsl:template>
    
    
    <xsl:template match="DisplayName[text()='xyz']"/>
    <!-- diese Elemente werden ignoriert -->
    
    
    <xsl:template match="Entries[count(descendant::*)=0]">
      <Entries><abc/></Entries>
    </xsl:template>

    Mit Deinem XML-Code ergibt sich diese Ausgabe:

    Code:
    <Result>
      <Element>
        <Category>
          <DisplayNames />
        </Category>
        <CellContent>
          <Edit>
            <Dictionary>
              <Language>
                <Entries>
                  <abc />
                </Entries>
              </Language>
            </Dictionary>
          </Edit>
        </CellContent>
      </Element>
    </Result>

    Comment


    • #3
      Identitäts-Transformation?!

      Danke Thomas! Das funktioniert echt TOP! So simpel und einleuchtend und doch bin ich nicht drauf gekommen!

      DANKE nochmals!

      Comment

      Working...
      X