JayJayS: XML-Element-Struktur ändern

Hallo, nachdem ich bereits unzählige Stunden Google durchsucht habe und trotzdem nicht schlauer bin, versuche ich es jetzt mal hier...

Folgendes Problem: Mir wird eine XML-Datei mit verschachtelten Elementen zur Verfügung gestellt. Um diese verarbeiten zu können, benötige ich jedoch eine unverschachtelte Struktur und mit anderen Elementbezeichnungen. Ich habe es auch schon mit XML_Konvertern versucht, jedoch konnte damit nicht das gewünschte Ausgabeformat erreicht werden.

Die bereitgestellte XML-Datei hat folgende Struktur:

<item number="..." xmlns:contentDetection="cd:extension">
 <category>
  <categoryID>...</categoryID>
  <categoryPath>...</categoryPath>
 </category>
 <wert>
  <displaywert>...</displaywert>
 </wert>
 <links>
  <item>...</item>
 </links>
 <details>
  <title>...</title>
  <description>...</description>
 </details>
 <date></date>
 <images>
  <img name="Adv">
   <URL>http://www.sineros.de/images/product_images/info_images/409407_0.jpg</URL>
  </img>
 </images>
</item>

Für den Import benötige ich jedoch folgende Struktur:

<data>
	<title>...</title>
	
	<description>...</description>
	
	<summary>...</summary>
	
	<imageurl>...</imageurl>
	
	<url>...</url>
</data>

Ich hoffe ich konnte mich verständlich ausdrücken und bedanke mich im voraus für Eure Mithilfe...

  1. Hallo JayJayS,

    Mir wird eine XML-Datei mit verschachtelten Elementen zur Verfügung gestellt. Um diese verarbeiten zu können, benötige ich jedoch eine unverschachtelte Struktur und mit anderen Elementbezeichnungen. Ich habe es auch schon mit XML_Konvertern versucht, jedoch konnte damit nicht das gewünschte Ausgabeformat erreicht werden.

    Diese Transformation wäre ein Ausgangspunkt:

    <?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" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="item">
        <data>
          <title>
            <xsl:value-of select="details/title"/>
          </title>
          <description>
            <xsl:value-of select="details/description"/>
          </description>
          <summary>...</summary> <!-- nicht vorhanden -->
          <imageurl>
            <xsl:value-of select="images/img/URL"/>
          </imageurl>
          <url>...</url> <!-- nicht vorhanden -->
        </data>
      </xsl:template>
    </xsl:stylesheet>
    
    

    Grüße, Thomas

    1. Hallo Thomas,

      danke erst einmal für deine Antwort. Diese bringt mich als absoluten Neuling schon mal wesentlich weiter als die ganzen Stunden in der Googleesuche.

      Setzte ich jetzt deine Transformation an den Anfang der bereitgestellten XML-Datei oder wie wende ich die Transformation an ?

      Diese Transformation wäre ein Ausgangspunkt:

      <?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" version="1.0" encoding="UTF-8" indent="yes"/>
        <xsl:template match="item">
          <data>
            <title>
              <xsl:value-of select="details/title"/>
            </title>
            <description>
              <xsl:value-of select="details/description"/>
            </description>
            <summary>...</summary> <!-- nicht vorhanden -->
            <imageurl>
              <xsl:value-of select="images/img/URL"/>
            </imageurl>
            <url>...</url> <!-- nicht vorhanden -->
          </data>
        </xsl:template>
      </xsl:stylesheet>
      
      

      Grüße, Thomas

      1. Hallo JayJayS,

        Setzte ich jetzt deine Transformation an den Anfang der bereitgestellten XML-Datei oder wie wende ich die Transformation an ?

        Einige XSLT-Grundlagen sind schon nötig.

        Verwende den freien XSLT-Prozessor Saxon-HE in dieser Form (setzt Java-Runtime voraus):

        java -jar saxon9he.jar -s:source.xml -xsl:stylesheet.xsl -o:output.xml

        Grüße, Thomas

        1. Hallo JayJayS,

          Einige XSLT-Grundlagen sind schon nötig.

          Verwende den freien XSLT-Prozessor Saxon-HE in dieser Form (setzt Java-Runtime voraus):

          java -jar saxon9he.jar -s:source.xml -xsl:stylesheet.xsl -o:output.xml

          Grüße, Thomas

          Zwar habe ich Saxon-HE nicht zum laufen gebraucht (wahrscheinlich muss da auch nichts laufen ;) ), die Einbindung als externe stylesheet-Datei habe ich aber verstanden. Wie ich das ganze nun noch auf meinem Rechner umsetzte, ist mir noch nicht ganz klar. Java-Runtime ist installiert und aktiviert. Wie aber öffne ich eine Konsole um

          java -jar saxon9he.jar -s:source.xml -xsl:stylesheet.xsl -o:output.xml

          auszuführen ?

          1. Hallo JayJayS,

            Zwar habe ich Saxon-HE nicht zum laufen gebraucht (wahrscheinlich muss da auch nichts laufen ;) ), die Einbindung als externe stylesheet-Datei habe ich aber verstanden. Wie ich das ganze nun noch auf meinem Rechner umsetzte, ist mir noch nicht ganz klar. Java-Runtime ist installiert und aktiviert. Wie aber öffne ich eine Konsole um

            java -jar saxon9he.jar -s:source.xml -xsl:stylesheet.xsl -o:output.xml

            auszuführen ?

            Windows-Taste + R --> cmd --> in das Verzeichnis wechseln (cd), am einfachsten vorab die .jar-Datei direkt zu den XML-Daten kopieren (Mac/Linux mit der entsprechenden Shell).

            Zum Testen, ob Java läuft, einfach java -version aufrufen.

            Grüße, Thomas

            1. Windows-Taste + R --> cmd --> in das Verzeichnis wechseln (cd), am einfachsten vorab die .jar-Datei direkt zu den XML-Daten kopieren (Mac/Linux mit der entsprechenden Shell).

              Zum Testen, ob Java läuft, einfach java -version aufrufen.

              Grüße, Thomas

              Das hat super geklappt ! DANKE !!! Das erinnert mich an alte MS-Dos-Zeiten... ;P

              Nun habe ich nur noch ein kleines Problem mit der Zeichencodierung in den Urls... Da macht es aus "&" ein "&amp;" Entitie. Dann funktioniert die Url aber nicht mehr... Mal schauen wie es sich bei einer ISO-Codierung verhält. Als nächstes sind dann noch CSV-Dateien in XMLs zu konvertieren und dann entsprechend zu transformieren. Wenn da nochmal Probleme oder Unklarheiten auftreten, melde ich mich nochmal... Nochmal ein riesen DANKESCHÖN bis hierhin...