Wie XML am besten Transformieren?

Shinzo

Mitglied
Hallo,

ich habe eine Frage bezüglich der notwendigen (am besten geeigneten XML-Technologie). Und zwar möchte ich folgende XML:

Code:
<Mahnungen>
  <Mahnung>
    <Name>Silver Surfer</Name>
    <Artikel>
      <Titel>Linux-Magazin</Titel>
      <ISSN>419-2-58730-595-403</ISSN>
      <zurueckzugebenAm>2010-04-17</zurueckzugebenAm>
      <Signatur>LiMa1234</Signatur>
    </Artikel>
  </Mahnung>
  <Mahnung>
    <Name>Silver Surfer</Name>
    <Artikel>
      <Titel>Designing BSD Rootkits</Titel>
      <ISBN>978-1-59327-142-8</ISBN>
      <zurueckzugebenAm>2010-05-02</zurueckzugebenAm>
      <Signatur>BSD3457</Signatur>
    </Artikel>
  </Mahnung>
</Mahnungen>

in folgendes umwandeln:

Code:
<Mahnungen>
  <Mahnung>
    <Name>Silver Surfer</Name>
    <Artikelliste>
    <Artikel>
      <Titel>Linux-Magazin</Titel>
      <ISSN>419-2-58730-595-403</ISSN>
      <zurueckzugebenAm>2010-04-17</zurueckzugebenAm>
      <Signatur>LiMa1234</Signatur>
    </Artikel>
    <Artikel>
      <Titel>Designing BSD Rootkits</Titel>
      <ISBN>978-1-59327-142-8</ISBN>
      <zurueckzugebenAm>2010-05-02</zurueckzugebenAm>
      <Signatur>BSD3457</Signatur>
    </Artikel>
    </Artikelliste>
  </Mahnung>
</Mahnungen>

Mit welcher XML-Technologie wäre dies am besten zu bewältigen? Ich habe mir über legt, dass ich es mittels DOM einlese und dann in einer Schleife alle Mahnungen durchgehe und die Artikel eines Kunden (siehe Name) in einer Mahnung zusammenfasse und die restlichen übriggebliebenen Mahnungen mit removeChild lösche. Würde ich hier mit SAX eventuell schneller vorankommen ? Hat jemand eine Idee ?

Bin für jeden Tipp dankbar.

Danke im Voraus,
Viele Grüße
Shinzo
 
Hallo,

ich würde nach gleichem Strickmuster wie in diesem Thread eine Gruppierung nach den Namen vornehmen. Das würde z.B. so aussehen:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" encoding="UTF-8" indent="yes" />

  <xsl:key name="grpMahnung" match="Mahnung" use="Name" />

  <xsl:template match="/Mahnungen">
    <Mahnungen>

      <xsl:for-each select="Mahnung[count(.|key('grpMahnung',Name)[1])=1]">
        <Mahnung>
          <xsl:copy-of select="Name" />
          <Artikelliste>

            <xsl:for-each select="key('grpMahnung',Name)">
              <xsl:copy-of select="Artikel" />
            </xsl:for-each>

          </Artikelliste>
        </Mahnung>
      </xsl:for-each>

    </Mahnungen>
  </xsl:template>

</xsl:stylesheet>
Du kannst natürlich auch durch den DOM-Baum klettern und alles einzeln einsammeln. ;)
Erscheint mir aber zu umständlich.
 

Neue Beiträge

Zurück