删除 XML 节点

2024-02-26

我有一个 XML 文件,其中包含<Notes>我想要删除的节点。

<APPOrganisationUnits>
  <APPOrganisationUnitsRow num="1">
    <OrganisationId>TEST1</OrganisationId>
    <APPContactDetails>
      <APPContactDetailsRow num="1">
        <Notes>Notes 1</Notes>
      </APPContactDetailsRow>
      <APPContactDetailsRow num="2">
        <Notes>Notes 2</Notes>
      </APPContactDetailsRow>
      <APPContactDetailsRow num="3">
        <Notes>Notes 3</Notes>
      </APPContactDetailsRow>
    </APPContactDetails>
  </APPOrganisationUnitsRow>
  <APPOrganisationUnitsRow num="2">
    <OrganisationId>TEST2</OrganisationId>
    <APPContactDetails>
      <APPContactDetailsRow num="1">
        <Notes>Notes 1</Notes>
      </APPContactDetailsRow>
      <APPContactDetailsRow num="2">
        <Notes>Notes 2</Notes>
      </APPContactDetailsRow>
    </APPContactDetails>
  </APPOrganisationUnitsRow>
</APPOrganisationUnits>

对于每个实例<notes>节点我只想删除它。我的代码可以运行但不会删除节点。

$XMLFile = "$Provider_Root\Processing\small.xml"
$xml = [xml](Get-Content $XMLFile)

foreach ($APPContactDetailsRow in $xml.APPOrganisationUnits.APPOrganisationUnitsRow.APPContactDetails) {
    if ($APPContactDetailsRow.Item('Notes')) {
        $APPContactDetailsRow.RemoveChild($_)
    }
}
$xml.Save($XMLFile)
}

当前对象变量($_) 未填充在循环上下文中。您需要先将子节点放入变量中,然后才能将其删除。另外,仅仅因为您在特定类型的节点之后命名变量,并不会通过该变量自动枚举节点。您需要实际扩展节点。

改变这个:

foreach ($APPContactDetailsRow in $xml.APPOrganisationUnits.APPOrganisationUnitsRow.APPContactDetails) {
    if ($APPContactDetailsRow.Item('Notes')) {
        $APPContactDetailsRow.RemoveChild($_)
    }
}

进入这个:

foreach ($APPContactDetailsRow in $xml.APPOrganisationUnits.APPOrganisationUnitsRow.APPContactDetails.APPContactDetailsRow) {
    $n = $APPContactDetailsRow.Item('Notes')
    if ($n) {
        $APPContactDetailsRow.RemoveChild($n)
    }
}

话虽如此,选择具有以下属性的节点可能会更简单XPath 表达式 http://saxon.sourceforge.net/saxon6.5.3/expressions.html并使用管道删除它们:

$xml.SelectNodes('//AppContactDetailsRow/Notes') | ForEach-Object {
    $_.ParentNode.RemoveChild($_)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除 XML 节点 的相关文章

随机推荐

  • JMeter:为单个用户触发多个并发 HTTP 请求

    我有一个带有线程组和 Cookie 管理器的 JMeter 负载测试脚本 线程组中的用户首先使用HTTP采样器登录来获取cookie 然后 循环控制器触发交错采样器 该采样器在几个向服务器发出查询的 HTTP 采样器之间交替 现在 我希望交
  • Delphi:更好的设计以避免循环单元引用?

    我在 Delphi 10 中有一个三角形网格结构 出于性能原因 我将网格顶点 三角形面等的数据存储在 TList 的后代中 我让 TList 为列表中的每个成员进行计算 对于这些计算 我需要访问 TMesh 结构的某些字段 因此 在创建 T
  • SVG - 从窗口坐标到ViewBox坐标

    基本上我有一个 svg SecondSVG 到一个 svg FirstSVG 到一个 svg MainSVG 每个 svg 都有自己的 ViewBox 该页面可以由另一个页面加载到屏幕上的任何位置 那么基本上我如何找到 SecondSVG
  • 单击时填充 HTML 下拉列表

    我有一个包含多个 HTML 的页面select下拉菜单 并且需要人口onclick的元素 此填充是通过在单击事件侦听器中使用 AJAX 调用完成的select元素 原因是性能和负载非常关键 因此不能在页面加载时填充它们 另外 设计must使
  • 在默认构造函数或内联初始化变量之间有区别吗? [复制]

    这个问题在这里已经有答案了 我在 Java 中发现了一些相关问题 但没有找到与 C 相关的问题 因此请原谅任何重复的问题 又短又甜 有什么区别 有没有 public static class Foo public static List
  • 与 if 语句中的字符串进行比较不起作用

    我尝试比较从 scanf 和 fscanf 获得的两个字符串 我已经弄清楚每个变量里面的内容是什么 它都显示相同的字符串 但是当我在 if 语句中与这两个字符串进行比较后 它不起作用并执行 else 语句 我的代码有什么问题吗 int ma
  • 如何使 jetty-maven-plugin 部署从存储库检索的战争?

    我正在为一个大型网络项目设置一个集成测试模块 集成测试模块与Web项目本身分离 并且有自己的pom xml 这个想法是使用 maven soapui plugin 发送请求并验证响应 设置soapui插件并不麻烦 但是 我无法弄清楚如何告诉
  • 如何在wpf中的用户控件中使用命令绑定?

    在主窗口中 命令绑定工作正常 在 UserControl 1 中它不起作用 请注意 数据上下文设置正确 作为绑定结果的按钮内容证明了这一点 我并不是试图将用户控件中的命令绑定到主窗口中的命令或任何其他此类技巧 我只是想复制我在 UserCo
  • 使用Git推送部署项目

    是否可以使用部署网站git push 我有预感这与使用有关git钩子 http www git scm com book en v2 Customizing Git Git Hooks执行一个git reset hard在服务器端 但我将如
  • 如何在 PHP 中定义空对象

    使用新数组我这样做 aVal array aVal key1 var1 something aVal key1 var2 something else 对象是否有类似的语法 object oVal oVal gt key1 gt var1
  • MySQL 使用双左连接更新行,限制第一个匹配

    我有三张桌子 SQLFiddle 已创建表 http sqlfiddle com 9 a3dab 橙色文本是我需要通过比较 Products name 与 Filters filter 获得的内容 我发现子字符串匹配可以这样完成 on Pr
  • 在 Rails 操作中解析 windows-1252 参数

    我的 API 正在接收一个在 POST 正文中包含 windows 1252 编码数据的调用 在 Rails 6 0 3 中 这显然有效 但是rails 6 1 1抛出ActionController BadRequest 无效的请求参数
  • 流中的异常未被捕获

    我有一个 kotlin 流程 其中中途抛出异常 无论我做什么 异常都不会被捕获 流程是这样的 在视图模型中 我有一个值 需要在日期更改时从数据库中重新读取 我为此使用了 switchmap val branches LiveData
  • 是否有 Scheduler/Calendar JS Widget 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一些基于 JavaScript 的组件用作课程安排程序 这将是 Google 日历和登录时间之间的交叉 我不知道正确的术语是课程
  • 防止快速单击按钮时导航两次

    我正在使用反应导航 并且希望防止当用户快速点击 单击按钮时导航到同一屏幕两次 这是我的减速器 export const navReducer state initialState action gt let nextState switch
  • 在 Android 上使用 Java AWS SDK 与 Android AWS SDK

    构建应用程序时是否可以使用 Java AWS SDK 而不是 Android AWS SDK 无论哪种方式 Java 都是所使用的底层技术 我希望使用 Android 版本的 SDK 中不提供的一些服务 AWS Java SDK 和 AWS
  • 我尝试使用 sort() 对数组进行排序,但失败

    if GET value moto array array 1 gt Yamaha array array 2 gt Suzuki array array 3 gt Triumph array array 4 gt KTM array ar
  • 在 VBA 代码中创建 PDF 文件会导致 Access 崩溃/关闭

    我有一个 MS Access 2016 应用程序 其中包含需要保存为 PDF 文件的报告 每当用户按下执行 PDF 输出的按钮时 应用程序就会在没有警告的情况下关闭 崩溃 知道什么可能导致这种情况吗 按下按钮调用的 VBA 代码如下所示 D
  • 有 2 个构造函数是正确的,一个用于依赖注入,另一个用于解决注入?

    我的类中有 2 个构造函数 public class CacheWebServices ICacheWebService public ICache apiConnector get set public CacheWebServices
  • 删除 XML 节点

    我有一个 XML 文件 其中包含