XSL - Attributen verwerken

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Het probleem

Ik wil XML-code importeren in een database. Daarbij komen alle eind-nodes overeen met kolomnamen. Daarvoor moeten tags uniek zijn. Dat heb ik hier geregeld. Nu het volgende probleem: Wat doe ik met attributen? → Die wil ik omfietsen naar aparte tags, om ze op dezelfde manier te kunnen importeren als de andere tags --

Maar niet altijd: Er zijn twee situaties:

Situatie (1): Attribuutnaam wordt nieuw element

Concreter: Ik wil invoer zoals

<items>
   <item type="S">
      <description>Betaalkosten</description
   </item>
...
</items>

transformeren naar

<items>
   <item>
      <item_type>S</item_type>
      <description>Betaalkosten</description
   </item>
...
</items>

Situatie (2): Attribuutwaarde wordt nieuw element

Invoer zoals

<FreeFields>
  <FreeTexts>
    <FreeText number="1"/>
    <FreeText number="2"/>
    <FreeText number="3"/>
    <FreeText number="4"/>
    <FreeText number="5">Codes</FreeText>
    <FreeText number="6">Codes</FreeText>
    <FreeText number="7"/>
    <FreeText number="8"/>
    <FreeText number="9"/>
    <FreeText number="10"/>
  </FreeTexts>
</FreeFields>

moet worden:

<FreeFields>
  <FreeTexts>
    <FreeText_number_01/>
    <FreeText_number_02/>
    <FreeText_number_03/>
    <FreeText_number_04/>
    <FreeText_number_05>Codes</FreeText_number_05>
    <FreeText_number_06>Codes</FreeText_number_06>
    ...
  </FreeTexts>
</FreeFields>

Terminologie

Het is nogal lastig denken over een probleem, als je het niet eens kunt benoemen. Hierbij wat terminologie, onderhevig aan nieuwe inzichten:

In:

<Item code="00000001" type="S" searchcode="00000001">
   <Description>Widget</Description>
</item>

Hebben de onderdelen deze namen:

* <item>, <description> - Dit zijn tags
* <description>         - Einnode
* code="00000001"       - Attribuut
* code                  - Attribuutnaam
* 00000001              - Attribuutwaarde.

Bronnen