Autor Beitrag
huhn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 272
Erhaltene Danke: 1

WIN XP
D7Pers
BeitragVerfasst: Mi 28.08.13 17:24 
Hi Forum,

ich möchte eine XML-Datei einlesen und gewisse Werte ändern, leider funktioniert dies noch nicht so wie will.
Das Format sieht wie folgend aus:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
<Archive code="0">
    <String name="container_name" value='"test"' />
    <String name="DockableViewDockName" value='"DockArea25"' />
    <Point name="scroll_offset" value="Point(0.000000,0.000000)" />
    <Archive code="0" name="listview_config">
        <Array name="col_id">
            <Int32 value="0" />
            <Int32 value="1" />
            <Int32 value="2" />
            <Int32 value="4" />
        </Array>
        <Array name="col_flags">
            <Int32 value="8" />
            <Int32 value="14" />
            <Int32 value="14" />
            <Int32 value="14" />
        </Array>
        <Array name="col_width">
            <Float value="16.000000" />
            <Float value="231.000000" />
            <Float value="24.000000" />
            <Float value="43.000000" />
        </Array>
        <Int32 name="list_sort_column" value="0" />
        <Int32 name="list_sort_order" value="0" />
        <Bool name="listview_mode" value="true" />

Ich versuche den Wert bei container_name im Attribute value zu ändern.
Ich nutze die XMLLib und mein Code sieht wie folgt aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var PassNode: TDOMNode;
    Doc:      TXMLDocument;
begin
    ReadXMLFile(Doc, path);
    //gibt entsprechenden Wert wieder
    showmessage(Doc.DocumentElement.ChildNodes.Item[0].Attributes.Item[0].NodeValue+'<>'+Doc.DocumentElement.ChildNodes.Item[0].Attributes.Item[1].NodeValue); 
    Doc.DocumentElement.FindNode('String').Attributes.GetNamedItem('name').?

ich würde gerne direkt die Variablennamen benutzen und nicht die Nodevalues durchsuchen um den value-Wert zu ändern. Ich hoffe ihr könnt mir helfen.

Gruß
huhn

_________________
Quod Erat Demonstrandum-Was zu beweisen war! *THX to Chrissivo!*
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 28.08.13 19:40 
Ich versteh deine Frage nicht, aber kann das sein, dass du XPath suchst?
Damit könntest du aber eine Expression bauen, die dir das Knoten finden einfacher macht, z.B. (Pseudocode für JS/Mozilla-DOM):
ausblenden Quelltext
1:
XPath(documentNode, "/Archive/String[@name='container_name']")[0].setAttribute('value', 'NeuerName')					

Keine Ahnung allerdings wie das mit TXMLDocument konkret geht.

Ist das übrigens Absicht, dass String-Werte dort doppelt gequoted werden?

Viele Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
huhn Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 272
Erhaltene Danke: 1

WIN XP
D7Pers
BeitragVerfasst: Mi 28.08.13 20:39 
ich benutze Lazarus^^ da ist manches komplizierter aber genau sowas hab ich gesucht danke

_________________
Quod Erat Demonstrandum-Was zu beweisen war! *THX to Chrissivo!*