使用Powershell删除一组XML元素

时间:2012-10-24 20:59:10

标签: xml powershell nodes

我在XML文档中有类似的内容:

<variables>
    <variable>
        <name>ctrl_btn</name>
        <value>button</value>
    </variable>
    <variable>
        <name>ctrl_snpt_calctrl</name>
        <value>The date entered must be less than or equal to</value>
    </variable>
</variables>

我能够使用Powershell提取文档中的某些元素(例如根据索引号获取名称或值元素)。但是,我不遵循这些指数的工作方式(或者无论指数是什么)。例如,查找name [1]给我ctrl_btn,但我会假设这将是name [0]。有人可以解释一下吗?

然而,我真正的问题是创建一个脚本来删除文档中的某些元素集合。例如,如果我想删除以下内容:

    <variable>
        <name>ctrl_snpt_calctrl</name>
        <value>The date entered must be less than or equal to</value>
    </variable>

我一直在搜索,但大多数示例只从XML中删除某个节点而不是上面的整个组。

XML文档中的名称和值始终是唯一的(顺便说一句,它在<variable></variable>元素中包含超过5000个不同的名称/值组合。

我要删除的元素列表包含在仅列出名称值的文本文件中(例如,文本文档将列出ctrl_btn,然后列出ctrl_snpt_calctrl)。

为了让您更好地了解,这是脚本执行的整个过程:

  1. 获取XML文档的内容
  2. 获取文档中所有项目的<name></name>元素之间的值
  3. 针对文件列表运行搜索,以验证该文件中是否使用了该名称。
  4. 如果未使用该名称,则会写入一个文本文件(例如,not_found.txt)。
  5. 如果`等于not_found.txt中找到的名称,则删除<variable></variable>标签及其间的所有内容。
  6. 我不确定上述过程是否有助于解释,但我认为我最好包括它。

    那么你如何删除这些?

1 个答案:

答案 0 :(得分:7)

假设您有一个字符串数组,其中每个元素都是您要删除的变量元素的名称,您可以执行以下操作:

$names = 'ctrl_btn','ctrl_snpt_calctrl'

$xml.variables.variable | ? { $names -contains $_.name } | % {$xml.variables.RemoveChild($_)}
  

我能够使用Powershell提取文档中的某些元素(例如根据索引号获取名称或值元素)。但是,我不遵循这些指数的工作方式(或者无论指数是什么)。例如,查找name [1]给我ctrl_btn,但我会假设这将是name [0]。有人可以解释一下吗?

不保证Xml订单,所以不要依赖于此。例如,在我的机器上,我得到了您期望的结果:

$xml.variables.variable.name[0] = ctrl_btn

$xml.variables.variable.name[1] = ctrl_snpt_calctrl