Nummerierung in XML mithilfe von XSL


matthi80

Grünschnabel
Hallo zusammen,

ich habe folgende XML-Struktur:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<myForm>
    <antrag_datum>23.01.2020</antrag_datum>
    <angaben_zum_bildinhaber>
        <name>Mustermann</name>
        <vorname>Max</vorname>
        <strasse>Musterstraße</strasse>
        <hausnummer>1</hausnummer>
        <postleitzahl>12345</postleitzahl>
        <ort>Musterhausen</ort>
    </angaben_zum_bildinhaber>
    <angaben_zu_fotos>
        <dateifeld>
            <dateifeld-item>
                <file length="1000" id="4711" description="Dummydatei" content-type="application/pdf">Dummy1.pdf</file>
                <bemerkung>Test 1</bemerkung>
            </dateifeld-item>
            <dateifeld-item>
                <file length="1000" id="0815" description="Dummydatei" content-type="application/pdf">Dummy2.pdf</file>
                <bemerkung>Test 2</bemerkung>
            </dateifeld-item>
        </dateifeld>
    </angaben_zu_fotos>
</myForm>
Ich würde nun gerne an die <file>-Elemente ein zustätzliches Attribut "nr" hinzufügen, welches die <file>-Elemente durchnummeriert.
Das File soll demnach nach der Transformation so aussehen:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<myForm>
    <antrag_datum>23.01.2020</antrag_datum>
    <angaben_zum_bildinhaber>
        <name>Mustermann</name>
        <vorname>Max</vorname>
        <strasse>Musterstraße</strasse>
        <hausnummer>1</hausnummer>
        <postleitzahl>12345</postleitzahl>
        <ort>Musterhausen</ort>
    </angaben_zum_bildinhaber>
    <angaben_zu_fotos>
        <dateifeld>
            <dateifeld-item>
                <file nr="01" length="1000" id="4711" description="Dummydatei" content-type="application/pdf">Dummy1.pdf</file>
                <bemerkung>Test 1</bemerkung>
            </dateifeld-item>
            <dateifeld-item>
                <file nr="02" length="1000" id="0815" description="Dummydatei" content-type="application/pdf">Dummy2.pdf</file>
                <bemerkung>Test 2</bemerkung>
            </dateifeld-item>
        </dateifeld>
    </angaben_zu_fotos>
</myForm>
Ich habe es mit folgendem Skript versucht, allerdings wird hierbei jedes Element der XML mit einer fortlaufenden Nummer versehen. Ich weiß daher nicht wie ich nur die <file>-Elemente anspreche.

XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:attribute name="nr">
      <xsl:number level="any" count="*" format="1" />
    </xsl:attribute>
    <xsl:apply-templates select="@*|node()" />
  </xsl:copy>
</xsl:template>
<xsl:template match="comment()|processing-instruction()" />

</xsl:stylesheet>
 

Technipion

Erfahrenes Mitglied
Hallo matthi80,
ich kenne zwar XSL nicht, aber prinzipiell lässt sich dein Problem mit allen gängigen Programmiersprachen lösen. Ich persönlich würde da z.B. zu Python greifen.
Die Frage ist allerdings, ob sich das lohnt. Wenn du nur bei 10-20 Dateien das zusätzliche Attribut einfügen möchtest, würde ich das eher händisch machen. Ist schneller.
Noch besser wäre es natürlich, dieses Attribut direkt bei der Erzeugung der XML-Dateien einzusetzen.

Gruß Technipion
 

matthi80

Grünschnabel
Hallo,

leider habe ich nicht die Möglichkeit eine andere Sprache zu verwenden. Die XML wird von einem System erzeugt und kann nur mittels XSLT transformiert werden. Das transformierte XML wird dann an ein angeschlossenes System weitergereicht.

Daher bin ich hier eingeschränkt und händisch ist auch keine Möglichkeit, da es automatisiert ablaufen soll/muss.
 

Yaslaw

n/a
Moderator
xslt - hab ich selber nie damit gerarbeitet. Eine Googlesuche hat mir jedoch den Befehl position() ausgespuckt.

 

Neue Beiträge