首页 > 解决方案 > 如何正确删除只有两个 XML 属性?

问题描述

我试图<Row></Row>从我的 XML 文件中只删除前两个属性。但是,使用以下代码,它会从所有属性中删除所有这些<Worksheet></Worksheet>属性。我究竟做错了什么?

我可以很好地获取元素 - 我在整个脚本中都这样做,但是删除一些元素对我来说似乎是一个问题。

    $names = $XML.Workbook.Worksheet | Select Name
    $environments = $XML.Workbook.Worksheet.Table.Row.Cell.Data

    foreach ($node in $names) {

        foreach ($name in $names) {

            if ($node.Name -match $name.'#text') {
                $delete = $XML.Workbook.Worksheet.Table.Row | Select -First 2 | % { $_.ParentNode.RemoveChild($_) }

                #$delete | ForEach-Object { $_.ParentNode.RemoveChild($_) }
            }
        }
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Worksheet ss:Name="some name">
  <Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="30" x:FullColumns="1"
   x:FullRows="1" ss:DefaultRowHeight="15">
   <Column ss:Width="274.5"/>
   <Column ss:AutoFitWidth="0" ss:Width="57"/>
   <Column ss:AutoFitWidth="0" ss:Width="96"/>
   <Column ss:Width="53.25"/>
   <Column ss:Index="6" ss:Width="274.5"/>
   <Column ss:AutoFitWidth="0" ss:Width="96"/>
   <Column ss:AutoFitWidth="0" ss:Width="54.75"/>
   <Column ss:AutoFitWidth="0" ss:Width="52.5"/>
   <Row>
    <Cell><Data ss:Type="String">xx</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">xx</Data></Cell>
    <Cell><Data ss:Type="String">xx</Data></Cell>
    <Cell><Data ss:Type="String">xx</Data></Cell>
    <Cell><Data ss:Type="String">xx</Data></Cell>
    <Cell ss:Index="6"><Data ss:Type="String">xx</Data></Cell>
    <Cell><Data ss:Type="String">xx</Data></Cell>
    <Cell><Data ss:Type="String">xx</Data></Cell>
    <Cell><Data ss:Type="String">xx</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">xx</Data></Cell>
    <Cell ss:StyleID="s16"><Data ss:Type="Boolean">0</Data></Cell>
    <Cell><Data ss:Type="Boolean">1</Data></Cell>
    <Cell><Data ss:Type="Boolean">1</Data></Cell>
    <Cell ss:Index="6"><Data ss:Type="String">xx</Data></Cell>
    <Cell ss:StyleID="s16"><Data ss:Type="Boolean">0</Data></Cell>
    <Cell><Data ss:Type="Boolean">1</Data></Cell>
    <Cell><Data ss:Type="Boolean">1</Data></Cell>
   </Row>

预期的输出应该是每个工作表,删除前两个<Row>标签。

当前的输出是它删除了每个<Row>标签。

标签: xmlpowershell

解决方案


推荐阅读