Hej!
Hvis jeg har en attribut, som er oprettet med:
var
Node, Attr: IXMLNode;
Hvordan laver jeg så om på attributtens navn? Altså fx:
<element navn='værdi'>
Jeg har prøvet med Attr.NodeName := 'string';
men den siger at NodeName er readonly...
Skal jeg lave den på en anden måde?
I kan lige få hele min procedure:
procedure Tmainform.CreateOption(Option: String; Value: String = '');
var
Node, Attr: IXMLNode;
begin
// Opret en indstilling
try
if not OptionExists(Option) then
begin
Attr.NodeName := 'name
Attr.Text := Option;
Node.AttributeNodes.Add(Attr);
Node.NodeName := 'option';
Node.Text := Value;
XMLSettings.ChildNodes.Nodes[1].ChildNodes.Add(Node);
XMLSettings.SaveToFile();
end;
except
ShowWarning('Kan ikke oprette indstilling.');
end;
end;
Håber i forstår.
Hilsen Mark
Hej Mark,
Først og fremmest så opretter (allokere) du ikke en ny node, hvilket vil sige at du til går et interface som peger et tilfældigt sted hen.
Når du opretter din node (CreateElement) så kan du her angive navnet på denne.
Jeg har dog ikke brugt Delphi's egen XML parser men i stedet brugt den fra Microsoft. Her er et eks. på hvordan det gøres:
procedure CreateAttrib(ADOM : IXMLDOMDocument2; ANode : IXMLDOMNode; AAttrName, AValue : String);
var
AttrNode : IXMLDOMNode;
begin
AttrNode := ADOM.createNode(NODE_ATTRIBUTE,AAttrName,'');
AttrNode.nodeValue := AValue;
ANode.attributes.setNamedItem(AttrNode);
end;
function CreateElement(ADOM : IXMLDOMDocument2; AElementName : String) : IXMLDOMNode;
var
ElemNode : IXMLDOMNode;
begin
ElemNode := ADOM.createNode(NODE_ELEMENT,AElementName,'');
Result := ElemNode;
end;
function CreateXML : String;
var
DOMDoc : TDOMDocument30;
N1, N2 : IXMLDOMNode;
DOM : IXMLDOMDocument2;
I : Integer;
begin
DOMDoc := TDOMDocument30.Create(nil);
CoInitialize(nil);
DOM := DOMDoc.DefaultInterface;
DOM.async := False;
N1 := CreateElement(DOM, 'ROOT_ELEMENT');
if N1 <> nil then
begin
CreateAttrib(DOM, N1, 'User', 'Mark');
CreateAttrib(DOM, N1, 'Password', 'none');
DOM.appendChild(N1);
N2 := CreateElement(DOM, 'CHILD_ELEMENT');
CreateAttrib(DOM, N2, 'Name', 'Michael');
CreateAttrib(DOM, N2, 'Location', 'Udvikleren.dk');
N1.appendChild(N2);
end;
Result := DOM.xml;
N1 := nil;
N2 := nil;
DOM := nil;
DOMDoc.Free;
CoUninitialize;
end;
Selv om du bruger Delphi's egen så burde det ligne MEGET den koden du ser for oven.
Håber det hjælper.
/Michael.
[Redigeret d. 09/01-04 18:23:46 af Michael Skovslund]