gpt4 book ai didi

xml - 从Delphi中的IXMLDOMDOCUMENT删除空的
    节点

转载 作者:行者123 更新时间:2023-12-03 18:05:39 25 4
gpt4 key购买 nike

我在xml文档中有很多xml节点。我想删除所有空的<ul>节点。我该怎么做?

这是一个片段:

  <li>
<a href="javascript:void(0);">Level 1</a>
<ul id="subject19">
<li>
<a href="javascript:void(0);">Level 2</a>
<ul id="subject20">
<li>
<a href="javascript:void(0);">Level 3</a>
<ul id="subject21"/>
</li>
</ul>
</li>
</ul>
</li>


我需要删除 <ul id="subject21"/>

最佳答案

您可以使用简单的递归。这是一个示例:

procedure ScanAndRemove(aNode: IXMLNode);
var
i: Integer;
childNode: IXMLNode;
begin
i := 0;
while i < aNode.ChildNodes.Count do
begin
childNode := aNode.ChildNodes[i];
if (childNode.NodeName = 'ul') and (childNode.ChildNodes.Count = 0) then
aNode.ChildNodes.Remove(childNode) else
begin
ScanAndRemove(childNode);
Inc(i);
end;
end;
end;


只需传递文档根元素:

procedure Cleanup;
var
xmlDoc: IXMLDocument;
begin
xmlDoc := TXMLDocument.Create(nil);
try
xmlDoc.LoadFromXML('...');
ScanAndRemove(xmlDoc.DocumentElement);
// now xmlDoc contains the desired result
finally
xmlDoc := nil;
end;
end;


编辑
递归函数将删除没有子节点但包含值的节点。例如:

<ul>
blabla
</ul>


如果您想要相反的选择,则应再添加一张支票-即:

if (childNode.NodeName = 'ul') and 
(childNode.ChildNodes.Count = 0) and
(VarToStrDef(childNode.NodeValue, '') = '') then
...


或这样- https://stackoverflow.com/a/9673869/3962893

关于xml - 从Delphi中的IXMLDOMDOCUMENT删除空的<ul>节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30233191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com