Knoten in XML-Dokument verschieben
Hallo Forum,
ich habe eine XML-Datei mit ca.20.000 Datensätzen. Die haben folgende Grundstruktur:
Diese Datei soll wie folgt umstrukturiert werden:
Ich suche einen möglichst einfachen Weg, um mit VB.NET oder C# die Notizen aus den Ereignissen zu löschen und stattdessen direkt an die Personen-Datensätze zu hängen. Es gibt auch Datensätze, bei denen die Notiz bei Geburt, bei Tod oder auch bei beiden Ereignissen fehlt.
Ich habe im Netz gelesen, dass mit LINQ solche Änderungen einfach umzusetzen wären, habe aber bisher damit keine Erfahrungen und auch bei XML ist dies mein erstes Vorhaben. Kann mir jemand auf die Sprünge helfen oder hat jemand ein gutes Tutorial, das auch für XML-Anfänger geeignet ist? Die Änderungen an den jeweiligen Texten in den Notizen sollte ich allein hinbekommen.
Vielen Dank im voraus,
M. Born
ich habe eine XML-Datei mit ca.20.000 Datensätzen. Die haben folgende Grundstruktur:
<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" />
</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>
Diese Datei soll wie folgt umstrukturiert 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" />
<NOTE_L1 Value="Tod:abends 21.03 Uhr" />
</INDI_L0>
Ich suche einen möglichst einfachen Weg, um mit VB.NET oder C# die Notizen aus den Ereignissen zu löschen und stattdessen direkt an die Personen-Datensätze zu hängen. Es gibt auch Datensätze, bei denen die Notiz bei Geburt, bei Tod oder auch bei beiden Ereignissen fehlt.
Ich habe im Netz gelesen, dass mit LINQ solche Änderungen einfach umzusetzen wären, habe aber bisher damit keine Erfahrungen und auch bei XML ist dies mein erstes Vorhaben. Kann mir jemand auf die Sprünge helfen oder hat jemand ein gutes Tutorial, das auch für XML-Anfänger geeignet ist? Die Änderungen an den jeweiligen Texten in den Notizen sollte ich allein hinbekommen.
Vielen Dank im voraus,
M. Born
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 621184
Url: https://administrator.de/forum/knoten-in-xml-dokument-verschieben-621184.html
Ausgedruckt am: 31.03.2025 um 00:03 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
https://www.google.com/search?q=Powershell+und+XML
https://www.google.com/search?q=XML+Editor
Gruß,
Peter
Zitat von @MarcoBorn:
ich habe eine XML-Datei mit ca.20.000 Datensätzen. Die haben folgende Grundstruktur:
Nicht eher eine (1) Datei und da drin dann deine ca. 20.000 Knoten?ich habe eine XML-Datei mit ca.20.000 Datensätzen. Die haben folgende Grundstruktur:
https://www.google.com/search?q=Powershell+und+XML
https://www.google.com/search?q=XML+Editor
Gruß,
Peter

Mach einfach einen XML-Transform mit XSLT
, hier ein passendes Stylesheet für deine Änderungen:
Wie man per .NET eine Stylesheet-Transformation macht kannst du dann hoffentlich noch selbst googeln...
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//DEATH_L1|//BIRT_L1">
<xsl:copy>
<xsl:apply-templates select="child::node()[not(self::NOTE_L2)]" />
</xsl:copy>
<xsl:apply-templates select="NOTE_L2" />
</xsl:template>
<xsl:template match="//DEATH_L1/NOTE_L2">
<NOTE_L1 Value="Tod:{@Value}" />
</xsl:template>
<xsl:template match="//BIRT_L1/NOTE_L2">
<NOTE_L1 Value="Geburt:{@Value}" />
</xsl:template>
</xsl:stylesheet>

Allerdings fehlen im Output sämtliche Zeilenumbrüche und Einrückungen, so dass der Inhalt nur schwer lesbar ist. Kann man das bei der Transformation beibehalten?
Klar, musst nur den XMLTextWriter dazu anweisen PrettyPrint zu machen https://stackoverflow.com/questions/1123718/format-xml-string-to-print-f ...

Ergebnis zählt 