removeChild() 方法打破了 for 循环

2023-11-29

我正在使用以下代码从 XMl 文件中删除多个元素。

NodeList removeNodeList = doc.getElementsByTagName("server1");
Element rootElement = doc.getDocumentElement();

for (int i = 0; i < removeNodeList.getLength(); i++) {
    rootElement.removeChild(removeNodeList.item(i));
}

但删除一个元素后,它就会脱离循环。这是什么问题。

以下是我的 XML 文件内容。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<start>

    <category name="server1"/>
    <category name="server2"/>

    <server1 name="serverName1" value="serverValue"/>
    <server1 name="serverName1" value="serverValue"/>

    <server2 name="serverName2" value="serverValue"/>

</start>

我找到了解决方案:

让我详细解释一下问题是什么。

NodeList removeNodeList = doc.getElementsByTagName("server1"); removeNodeList.getLength()将返回 2,因为有 2 个具有 nodeName 的节点server1然后执行后rootElement.removeChild(removeNodeList.item(i));然后检查for loop状况i.e.的价值i is 1 and removeNodeList.getLength()回报1现在只有 1 个具有 nodeName 的节点server1剩余于DOM document这个条件失败了1 < 1 is false

所以我遵循了以下方法:

一旦 NodeList 不再使用,就删除所有元素。

NodeList nodes = doc.getElementsByTagName(elementName);
Set<Element> targetElements = new HashSet<Element>();

for (int i = 0; i < nodes.getLength(); i++) {
    Element e = (Element)nodes.item(i);
    targetElements.add(e);
}
for (Element e: targetElements) {
    e.getParentNode().removeChild(e);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

removeChild() 方法打破了 for 循环 的相关文章

随机推荐

  • Apache SetEnvIf 麻烦

    我的中有以下内容 htaccess file SetEnvIf Host example com myvar 1
  • 如何使用 XML::LibXML 解析 XML 文档并构建 Perl 哈希

    我有这样的 XML 数据
  • 如何用Flutter实现position:sticky和bottom 0?

    我想建立一个带有粘性页脚的列表视图 例如本文的 粘到底 在颤振中 In CSS main footer position sticky bottom 0 但是 Flutter 该怎么办呢 我想要的是 可滚动的大内容 页脚 粘性 可滚动的大内
  • JavaScript 闭包和 setTimeout

    闭包是我在 JS 中还没有完全掌握的东西 我认为这是一个封闭问题 我正在尝试创建一个进度条 每隔 x 秒我想增加 DIV 的宽度 这是应该执行此操作的部分 for i 0 i lt counter i setTimeout function
  • System.Drawing.Graphics.DpiX 始终返回 96

    我有 vb net winform 应用程序 自动缩放模式 dpi 自动缩放 假 自动调整大小 true 更改 DPI 设置后我已退出 我也尝试过重新启动机器 Using g As Graphics form CreateGraphics
  • 如何将我的代码从 v11 迁移到 Discord.js v12?

    我升级到 Discord js v12 但它破坏了我现有的 v11 代码 以下是导致错误的一些示例 TypeError client users get is not a function const user client users g
  • Android 中用颜色填充 ArrayList

    我想创建2个ArrayList 一种持有 16 种颜色 另一种持有 139 种颜色 我有颜色列表 RGB 为 255 126 32 十六进制为 0xFFFF2552 我想使用 ArrayList 稍后从中选择随机颜色 我试过 int 但不起
  • 在通过管道将 STDOUT 传输到文件时捕获 STDERR 的输出

    我的情况很奇怪 我正在尝试使用 Perl 自动备份 SVN 存储库集合 我正在使用 svnadmin dump 命令 该命令将转储发送到 STDOUT 并将遇到的任何错误发送到 STDERR 我需要运行的命令的形式为 svnadmin du
  • 对可拖动项目应用双击

    我有一个黄色按钮 可以将其拖放到灰色面板上 我使用 handleDragStop 函数来处理用户拖放黄色按钮时需要完成的所有任务 一切都很好 但是 我想知道如何启用用户双击黄色按钮的行为并具有与拖放时相同的行为 top icon dragg
  • c# 自定义 Dictionary 接受重复键进行序列化

    我需要实现一个有点类似字典的自定义功能 但可以插入重复的键 所以基本上我需要从 Dictionary 中得到的是将对象序列化为以下 JSON 的可能性 One Value 1 Two Value x One Value 10 Two Val
  • 如何通过 Watin 中的代码关闭弹出窗口拦截器?

    我在通过 watin 代码关闭弹出窗口阻止程序时遇到麻烦 谁能帮我知道如何通过 watin 关闭 IE 的弹出窗口拦截器 如果 IE 中安装了工具栏 如 google yahoo 或 msn 的弹出窗口拦截器 有什么方法可以关闭它们吗 提前
  • 推荐用于托管许多独立补丁的 DVCS 机制

    我有一个项目刚刚开始http sourceforge net projects iotabuildit 更多详细信息请参见http sourceforge net p iotabuildit wiki Home 当前正在使用 Mercuri
  • 如何在ReactJS中使用video元素的playbackRate参数?

    我需要你的帮助来修复我的代码 class header extends Component playVideo You can use the play method as normal on your video ref this ref
  • Lua 5.2 添加 luasocket (不稳定)

    我正在尝试将 luasocket 与 lua 5 2 一起使用 我从 git 存储库下载了代码并构建了它 然后进行 make install 以便生成 core dll 和 mime dll 将它们放入正在开发的自定义 lua 程序目录 C
  • ExpectIt:实施 sudo -i 时遇到问题

    我正在创建一个 Web shell 客户端并成功创建了一个简单的终端 我可以执行基本命令 但我需要执行sudo i并传递密码 发送 sudo i 命令后 我 期望 新用户 作为 root 提示 但 期望 永远等待 我可以看到提示符合预期 该
  • 在下游生成新的 Windows 窗体时如何使用 DI?

    我的 Unity DI 容器正在运行最初与我的 Windows 窗体应用程序 在Program cs我有以下内容 static void Main var container BuildUnityContainer Application
  • 在 jqGrid 中的 loadBeforeSend 上设置 Url

    我有一个用于大量报告的 wcf 服务 该服务将 json 数据返回到我的 jqgrid 一切都按预期进行 但是 由于每个报告查询有大量用户输入 我选择使用与我在服务器上设置的一系列 输入模型 相匹配的 json 字符串 我不想在我的路线中弄
  • 调用 finish() 并重新启动应用程序后,Timber 重复日志

    我有一个触摸监听器在我的 TextView 上 在触摸时 我登录Timber i 然后我打电话finish 如果在 finish 之后 我再次启动我的应用程序 并再次单击 TextView 它将记录两次 然后 3 次 依此类推 如果我用普通
  • 当单元格尚未构建时,如何计算 heightForRowAtIndexPath?

    问题 如何最好地计算 UITableViewController 的 heightForRowAtIndexPath 方法中一行的高度 假设 我正在使用自定义子类 UITableViewCell 子视图的实际大小 例如 UILabels 是
  • removeChild() 方法打破了 for 循环

    我正在使用以下代码从 XMl 文件中删除多个元素 NodeList removeNodeList doc getElementsByTagName server1 Element rootElement doc getDocumentEle