RAD Studio
|
Once an XML document has been parsed by a DOM implementation, the data it represents is available as a hierarchy of nodes. Each node corresponds to a tagged element in the document. For example, given the following XML:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE StockHoldings SYSTEM "sth.dtd">
<StockHoldings>
<Stock exchange="NASDAQ">
<name>Borland</name>
<price>15.375</price>
<symbol>BORL</symbol>
<shares>100</shares>
</Stock>
<Stock exchange="NYSE">
<name>Pfizer</name>
<price>42.75</price>
<symbol>PFE</symbol>
<shares type="preferred">25</shares>
</Stock>
</StockHoldings>
TXMLDocument would generate a hierarchy of nodes as follows: The root of the hierarchy would be the StockHoldings node. StockHoldings would have two child nodes, which correspond to the two Stock tags. Each of these two child nodes would have four child nodes of its own (name, price, symbol, and shares). Those four child nodes would act as leaf nodes. The text they contain would appear as the value of each of the leaf nodes.
Given an IXMLNode interface, you can check whether it represents an internal node or a leaf node by checking the IsTextElement property.
BorlandStock := XMLDocument1.DocumentElement.ChildNodes[0]; Price := BorlandStock.ChildNodes['price'].Text;
_di_IXMLNode BorlandStock = XMLDocument1->DocumentElement->ChildNodes->GetNode(0); AnsiString Price = BorlandStock->ChildNodes->Nodes[WideString("price")]->Text;
If the node includes any attributes, you can work with them using the Attributes property. You can read or change an attribute value by specifying an existing attribute name. You can add new attributes by specifying a new attribute name when you set the Attributes property:
BorlandStock := XMLDocument1.DocumentElement.ChildNodes[0]; BorlandStock.ChildNodes['shares'].Attributes['type'] := 'common';
_di_IXMLNode BorlandStock = XMLDocument1->DocumentElement->ChildNodes->GetNode(0); BorlandStock->ChildNodes->Nodes[WideString("shares")]->Attributes[WideString("type")] = "common";
You can add child nodes using the AddChild method. AddChild creates new nodes that correspond to tagged elements in the XML document. Such nodes are called element nodes.
To create a new element node, specify the name that appears in the new tag and, optionally, the position where the new node should appear. For example, the following code adds a new stock listing to the document above:
var NewStock: IXMLNode; ValueNode: IXMLNode; begin NewStock := XMLDocument1.DocumentElement.AddChild('stock'); NewStock.Attributes['exchange'] := 'NASDAQ'; ValueNode := NewStock.AddChild('name'); ValueNode.Text := 'Cisco Systems' ValueNode := NewStock.AddChild('price'); ValueNode.Text := '62.375'; ValueNode := NewStock.AddChild('symbol'); ValueNode.Text := 'CSCO'; ValueNode := NewStock.AddChild('shares'); ValueNode.Text := '25'; end;
_di_IXMLNode NewStock = XMLDocument1->DocumentElement->AddChild(WideString("stock")); NewStock->Attributes[WideString("exchange")] = "NASDAQ"; _di_IXMLNode ValueNode = NewStock->AddChild(WideString("name")); ValueNode->Text = WideString("Cisco Systems"); ValueNode = NewStock->AddChild(WideString("price")); ValueNode->Text = WideString("62.375"); ValueNode = NewStock->AddChild(WideString("symbol")); ValueNode->Text = WideString("CSCO"); ValueNode = NewStock->AddChild(WideString("shares")); ValueNode->Text = WideString("25");
An overloaded version of AddChild lets you specify the namespace URI in which the tag name is defined.
You can delete child nodes using the methods of the ChildNodes property. ChildNodes is an IXMLNodeList interface, which manages the children of a node. You can use its Delete method to delete a single child node that is identified by position or by name. For example, the following code deletes the last stock listed in the document above:
StockList := XMLDocument1.DocumentElement; StockList.ChildNodes.Delete(StockList.ChildNodes.Count - 1);
_di_IXMLNode StockList = XMLDocument1->DocumentElement; StockList->ChildNodes->Delete(StockList->ChildNodes->Count - 1);
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|