marcoborn
Goto Top

Knoten in XML verschieben, Teil 2

Hallo Forum,
ich habe letzte Woche eine Frage zu XML hier gepostet: Knoten in XML-Dokument verschieben
Dazu hat sich jedoch noch eine Rückfrage ergeben. Vielleicht kann mir jemand noch einen Tipp geben, wie ich die Transformation anpassen muss, damit auch die Unterknoten mit verschoben werden. Aus
<INDI_L0 OrigID="@I10@" >  
    <NAME_L1 Value="Kurt Andres" />  
    <SEX_L1 Value="M" />  
    <_UID_L1 Value="db4b4267-51e8-4f66-9272-29187e29b57c" />  
    <BIRT_L1 Value="">  
      <DATE_L2 Value="18 JUN 1927" />  
      <PLAC_L2 Value="Hannover" />  
      <NOTE_L2 Value="Nordstadtkrankenhaus" >  
        <CONT_L3 Value ="Gewicht: 3,5 kg" />  
        <CONT_L3 Value ="Größe: 48 cm" />  
      </NOTE>
    </BIRT_L1>
    <DEATH_L1 Value="">  
      <DATE_L2 Value="21 JUN 1927" />  
      <PLAC_L2 Value="Mannheim" />  
      <NOTE_L2 Value="abends 21.03 Uhr" />  
    </DEAT_L1>
  </INDI_L0>
soll letztlich folgendes erzeugt werden:
  <INDI_L0 OrigID="@I10@" >  
    <NAME_L1 Value="Kurt Andres" />  
    <SEX_L1 Value="M" />  
    <_UID_L1 Value="db4b4267-51e8-4f66-9272-29187e29b57c" />  
    <BIRT_L1 Value="">  
      <DATE_L2 Value="18 JUN 1927" />  
      <PLAC_L2 Value="Hannover" />  
    </BIRT_L1>
    <DEATH_L1 Value="">  
      <DATE_L2 Value="21 JUN 1927" />  
      <PLAC_L2 Value="Mannheim" />  
    </DEAT_L1>
    <NOTE_L1 Value="Geburt: Nordstadtkrankenhaus" >  
        <CONT_L2 Value ="Gewicht: 3,5 kg" />  
        <CONT_L2 Value ="Größe: 48 cm" />  
    </NOTE>
    <NOTE_L1 Value="Tod:abends 21.03 Uhr" />  
  </INDI_L0>

Vielen Dank,
M. Born

Content-Key: 622967

Url: https://administrator.de/contentid/622967

Printed on: May 3, 2024 at 02:05 o'clock

Member: Printe
Solution Printe Nov 16, 2020 updated at 16:00:54 (UTC)
Goto Top
noch einen Tipp geben
Tipp: XSLT <xsl:for-each> Element

Hier für dich als Mini-Hausaufgabe: Fülle im modifizierten Ausschnitt die Lücke mit den Punkten
        <xsl:template match="//DEATH_L1/NOTE_L2">  
	  <NOTE_L1 Value="Tod:{@Value}">  
		<xsl:for-each select="CONT_L3">  
			..............
		</xsl:for-each>
	  </NOTE_L1>
	</xsl:template>
	
	<xsl:template match="//BIRT_L1/NOTE_L2">  
	  <NOTE_L1 Value="Geburt:{@Value}">  
		<xsl:for-each select="CONT_L3">  
			.............
		</xsl:for-each>
	  </NOTE_L1>
	</xsl:template>



Btw. dein hier gepostetes XML is übrigens alles andere als "valid", wenn man das noch nicht mal voher kontrolliert, ts ts ts.
Member: MarcoBorn
MarcoBorn Nov 17, 2020 at 07:38:13 (UTC)
Goto Top
Guten Morgen,
vielen Dank für den Hinweis auf for-each. Nach etwas probieren habe ich jetzt eine funktionierende Transformation. Das von mir gepostete XML war nur als verkürztes Beispiel gedacht. Alle nicht für mein Problem relevanten Teile habe ich dort weggelassen.

Viele Grüße,
M. Born
Member: Printe
Printe Nov 17, 2020 updated at 11:40:12 (UTC)
Goto Top
Zitat von @MarcoBorn:
Das von mir gepostete XML war nur als verkürztes Beispiel gedacht. Alle nicht für mein Problem relevanten Teile habe ich dort weggelassen.
Man sollte aber zumindest die Element-Namen darin richtig schreiben, XML verzeiht keine Schlampigkeiten face-wink
</DEAT_L1>
Member: MarcoBorn
MarcoBorn Nov 17, 2020 at 14:45:36 (UTC)
Goto Top
Das Tag für den Tod wird in der von mir benutzten Specifikation tatsächlich mit DEAT und nicht mit DEATH abgekürzt.
Member: Printe
Printe Nov 17, 2020 updated at 14:48:30 (UTC)
Goto Top
Dann muss aber auch der Anfangs-Tag DEAT_L1 und nicht DEATH_L1 heißen! Ein "non matching" Anfangstag ohne zugehörigen End-Tag führt zwangsläufig zu invalidem XML.