4

我在 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. <variable></variable>如果 ` 等于 not_found.txt 中的名称,则删除标签及其之间的所有内容。

我不确定上述过程是否有助于解释,但我认为我最好将其包括在内。

那么如何删除这些?

4

1 回答 1

8

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

$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
于 2012-10-24T22:02:57.113 回答