![]() |
einige SubNodes an einen SubNode hängen
Moin zusammen,
sorry für den Titel aber es ist mir nichts besseres eingefallen. Ich möchte gerne folgende XML Datei erzeugen.
XML-Code:
Leider gelingt es mir nicht. Ich bekomme nur folgende Struktur hin.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<subsubitems> <column> <item_1> <visible>1</visible> <position>1</position> <width>120</width> </item_1> <item_2> <visible>1</visible> <position>1</position> <width>120</width> </item_2> </column> </subsubitems>
XML-Code:
Dies ist mein Code.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<subsubitems> <column> <item_1> <visible>1</visible> <position>1</position> <width>120</width> </item_1> </column> <column> <item_2> <visible>1</visible> <position>2</position> <width>240</width> </item_2> </column> </subsubitems>
Delphi-Quellcode:
Wie muss ich meinen Code ändern, dass ich die 1. Struktur bekomme? Ich habe schon ne Menge probiert aber leider ohne Erfolg.
...
ColumnName := 'item_1'; xmlNode := xmlDoc.documentElement.selectSingleNode('/subsubitems/columns/'+ColumnName); if Assigned(xmlNode) then begin try xmlNode.selectSingleNode('visible').Text := '1'; xmlNode.selectSingleNode('position').Text := '1'; xmlNode.selectSingleNode('width').Text := '120'; except // end; end else begin NewItem := xmlDoc.createElement('column'); NewItemSub := xmlDoc.createElement(ColumnName); NewSub := xmlDoc.createElement('visible'); NewSub.text := '1'; NewItemSub.appendChild(NewSub); NewSub := xmlDoc.createElement('position'); NewSub.text := '1'; NewItemSub.appendChild(NewSub); NewSub := xmlDoc.createElement('width'); NewSub.text := '120'; NewItemSub.appendChild(NewSub); NewItem.appendChild(NewItemSub); xmlDoc.documentElement.appendChild(NewItem); end; ColumnName := 'item_2'; xmlNode := xmlDoc.documentElement.selectSingleNode('/subsubitems/columns/'+ColumnName); if Assigned(xmlNode) then begin try xmlNode.selectSingleNode('visible').Text := '2'; xmlNode.selectSingleNode('position').Text := '2'; xmlNode.selectSingleNode('width').Text := '240'; except // end; end else begin NewItem := xmlDoc.createElement('column'); NewItemSub := xmlDoc.createElement(ColumnName); NewSub := xmlDoc.createElement('visible'); NewSub.text := '2'; NewItemSub.appendChild(NewSub); NewSub := xmlDoc.createElement('position'); NewSub.text := '2'; NewItemSub.appendChild(NewSub); NewSub := xmlDoc.createElement('width'); NewSub.text := '240'; NewItemSub.appendChild(NewSub); NewItem.appendChild(NewItemSub); xmlDoc.documentElement.appendChild(NewItem); end; xmlDoc.save(AppPath + XML_FNAME); Vielen Dank im voraus. Sven |
Re: einige SubNodes an einen SubNode hängen
.documentElement ist das Root-Item (wovon es übrigend eh nur eines geben kann) und entspricht somit schon deinem Root-Item "subsubitems"
versuch mal dieses:
Delphi-Quellcode:
xmlNode := xmlDoc.documentElement.selectSingleNode('columns/'+ColumnName);
|
Re: einige SubNodes an einen SubNode hängen
Danke für den Tipp. Habe ich geändert. Es hat sich leider nichts geändert.
Was nun? |
Re: einige SubNodes an einen SubNode hängen
Ohhh ... hmmmmm, mal überlegen. :gruebel:
Tja, dann wirst du dich wohl mal fragen müssen, warum der Node immernoch nicht gefunden wird? Mal sehn, wem was auffällt. :stupid:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<subsubitems> <column> <item_1>
Code:
[color=blue]//xmlNode := xmlDoc.documentElement.selectSingleNode('/subsubitems/column[/color][color=red]s[/color][color=blue]/'+ColumnName);[/color]
xmlNode := xmlDoc.documentElement.selectSingleNode('column[color=red]s[/color]/'+ColumnName); |
Re: einige SubNodes an einen SubNode hängen
Ah..ok, dass war ein Tippfehler.
Trotzdem habe ich immer noch die 1. Struktur. Der Fehler wäre auch nur relevant bei Daten, die schon vorhanden sind. Wenn ich aber alles neuanlege, soll ja schon die richtige Struktur erstellt werden. Also nur das Erstellen ist in ertser Linie interessant. So soll es aussehen:
XML-Code:
Nur ein Columns Knoten, welcher dann aller Column Werte (z.B. item_1) enthält.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<subsubitems> <columns> <item_1> <visible>1</visible> <position>1</position> <width>120</width> </item_1> <item_2> <visible>1</visible> <position>1</position> <width>120</width> </item_2> </columns> </subsubitems> Danke schon mal. |
Re: einige SubNodes an einen SubNode hängen
OK, dann sollte man auch nicht jedesmal 'columns' neu erstellen. :lol:
Delphi-Quellcode:
und wenn du ganz auf Nummer sichergehn willst, dann:
procedure SetItem(ColumnName: String; Visible: Boolean; Position, Width: Integer);
... begin xmlColNode := xmlDoc.documentElement.selectSingleNode('columns'); if not Assigned(xmlColNode) then begin xmlColNode := xmlDoc.createElement('column'); xmlDoc.documentElement.appendChild(xmlColNode); end; xmlNode := xmlColNode.selectSingleNode(ColumnName); if Assigned(xmlNode) then begin xmlNode.selectSingleNode('visible').Text := Visible; xmlNode.selectSingleNode('position').Text := Position; xmlNode.selectSingleNode('width').Text := Width; end else begin xmlNode := xmlDoc.createElement(ColumnName); xmlColNode.appendChild(xmlNode); NewSub := xmlDoc.createElement('visible'); NewSub.text := Visible; xmlNode.appendChild(NewSub); NewSub := xmlDoc.createElement('position'); NewSub.text := Position; xmlNode.appendChild(NewSub); NewSub := xmlDoc.createElement('width'); NewSub.text := Width; xmlNode.appendChild(NewSub); end; end; (eine leere Try-Except-Behandlung ist nicht sonderlich schön)
Delphi-Quellcode:
(jetzt weiß ich wieder, warum ich MSXML nicht mag :angel2: ... Unmassen Zeilen an Code, wo doch 3 Zeilen gereicht hätten)
procedure SetItem(ColumnName: String; Visible: Boolean; Position, Width: Integer);
... begin xmlColNode := xmlDoc.documentElement.selectSingleNode('columns'); if not Assigned(xmlColNode) then begin xmlColNode := xmlDoc.createElement('column'); xmlDoc.documentElement.appendChild(xmlColNode); end; xmlNode := xmlColNode.selectSingleNode(ColumnName); if not Assigned(xmlNode) then begin xmlNode := xmlDoc.createElement(ColumnName); xmlColNode.appendChild(xmlNode); end; xmlSubNode := xmlNode.selectSingleNode('visible'); if not Assigned(xmlSubNode) then begin xmlSubNode:= xmlDoc.createElement('visible'); xmlNode.appendChild(xmlSubNode); end; xmlSubNode.Text := Visible; xmlSubNode := xmlNode.selectSingleNode('position'); if not Assigned(xmlSubNode) then begin xmlSubNode:= xmlDoc.createElement('position'); xmlNode.appendChild(xmlSubNode); end; xmlSubNode.Text := Position; xmlSubNode := xmlNode.selectSingleNode('width'); if not Assigned(xmlSubNode) then begin xmlSubNode:= xmlDoc.createElement('width'); xmlNode.appendChild(xmlSubNode); end; xmlSubNode.Text := Width; end; |
Re: einige SubNodes an einen SubNode hängen
Vielen Dank. Hat geklappt. Irgendwie hast du recht. Viele Code für wenig Aktion.
Danke nochmal. |
Re: einige SubNodes an einen SubNode hängen
gern geschen :-D
himXML mit standardmäßig aktivem AutoNodeCreate ( *überleg* hat MSXML vielleicht auch sowas in den Optionen? )
Delphi-Quellcode:
oder
xmlDoc['columns\item_1\visible'].Text := 1;
xmlDoc['columns\item_1\position'].Text := 1; xmlDoc['columns\item_1\width'].Text := 120;
Delphi-Quellcode:
Einige andere XML-Libs sollten sowas auch hinbekommen. :angel:
with xmlDoc['columns\item_1'] do begin
Node['visible'].Text := 1; Node['position'].Text := 1; Node['width'].Text := 120; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz