删除 Delphi 中的特定 XML 元素
Remove specific XML element in Delphi
我有一个 xml 文档如下所示:
<?xml version="1.0"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ExtensionData />
<Name>ali</Name>
<Age>37</Age>
<Father>
<ExtensionData />
<Name>I</Name>
<Age>72</Age>
</Father>
<Mother>
<ExtensionData />
<Name>M</Name>
<Age>62</Age>
</Mother>
</Person>
我正在使用 Delphi 7.
如何像这样删除 XML 文档中的所有 ExtensionData 元素?
您可以使用IXMLNodeList.Delete()
或IXMLNodeList.Remove()
方法删除节点:
var
Root: IXMLNode;
begin
Root := XMLDocument1.DocumentElement;
Root.ChildNodes.Delete('ElementData');
for I := 0 to Root.ChildNodes.Count-1 do
Root.ChildNodes[I].ChildNodes.Delete('ElementData');
end;
var
Root, Child, Node: IXMLNode;
begin
Root := XMLDocument1.DocumentElement;
Node := Root.ChildNodes.FindNode('ElementData');
if Node <> nil then Root.ChildNodes.Remove(Node);
for I := 0 to Root.ChildNodes.Count-1 do
begin
Child := Root.ChildNodes[I];
Node := Child.ChildNodes.FindNode('ElementData');
if Node <> nil then Child.ChildNodes.Remove(Node);
end;
end;
如果您想删除所有 ElementData
元素,无论它们在文档中的深度如何,递归过程可以做到这一点:
procedure RemoveElementData(Node: IXMLNode);
var
Root, Child: IXMLNode;
begin
repeat until Node.ChildNodes.Delete('ElementData') = -1;
for I := 0 to Node.ChildNodes.Count-1 do
RemoveElementData(Node.ChildNodes[I]);
end;
end;
begin
RemoveElementData(XMLDocument1.DocumentElement);
end;
我有一个 xml 文档如下所示:
<?xml version="1.0"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ExtensionData />
<Name>ali</Name>
<Age>37</Age>
<Father>
<ExtensionData />
<Name>I</Name>
<Age>72</Age>
</Father>
<Mother>
<ExtensionData />
<Name>M</Name>
<Age>62</Age>
</Mother>
</Person>
我正在使用 Delphi 7.
如何像这样删除 XML 文档中的所有 ExtensionData 元素?
您可以使用IXMLNodeList.Delete()
或IXMLNodeList.Remove()
方法删除节点:
var
Root: IXMLNode;
begin
Root := XMLDocument1.DocumentElement;
Root.ChildNodes.Delete('ElementData');
for I := 0 to Root.ChildNodes.Count-1 do
Root.ChildNodes[I].ChildNodes.Delete('ElementData');
end;
var
Root, Child, Node: IXMLNode;
begin
Root := XMLDocument1.DocumentElement;
Node := Root.ChildNodes.FindNode('ElementData');
if Node <> nil then Root.ChildNodes.Remove(Node);
for I := 0 to Root.ChildNodes.Count-1 do
begin
Child := Root.ChildNodes[I];
Node := Child.ChildNodes.FindNode('ElementData');
if Node <> nil then Child.ChildNodes.Remove(Node);
end;
end;
如果您想删除所有 ElementData
元素,无论它们在文档中的深度如何,递归过程可以做到这一点:
procedure RemoveElementData(Node: IXMLNode);
var
Root, Child: IXMLNode;
begin
repeat until Node.ChildNodes.Delete('ElementData') = -1;
for I := 0 to Node.ChildNodes.Count-1 do
RemoveElementData(Node.ChildNodes[I]);
end;
end;
begin
RemoveElementData(XMLDocument1.DocumentElement);
end;