【问题标题】:XML Powershell get and remove element nodeXML Powershell 获取和删除元素节点
【发布时间】:2021-12-18 14:16:19
【问题描述】:

我想从 MsDtsSrvr.ini 中删除一个元素,即整个节点:

<Folder xsi:type="SqlServerFolder">
      <Name>MSDB</Name>
      <ServerName>.</ServerName>
    </Folder>

文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<DtsServiceConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <StopExecutingPackagesOnShutdown>true</StopExecutingPackagesOnShutdown>
  <TopLevelFolders>
    <Folder xsi:type="SqlServerFolder">
      <Name>MSDB</Name>
      <ServerName>.</ServerName>
    </Folder>
    <Folder xsi:type="FileSystemFolder">
      <Name>File System</Name>
      <StorePath>..\Packages</StorePath>
    </Folder>
  </TopLevelFolders>
</DtsServiceConfiguration>

我没有做的是将整个节点变成变量,除非我这样做:

$sqlserverFolder = $xmlFile.SelectSingleNode("/DtsServiceConfiguration/TopLevelFolders/Folder")
$sqlServerFolder.ParentNode.RemoveChild($sqlServerFolder)

这实现了我想要的,但是明显的问题是我没有选择这个特定的节点,我想 powershell 只是选择了第一个。我宁愿避免去了解到底发生了什么。

当我使用此脚本选择所有节点时:

$xmlFile.SelectNodes("/DtsServiceConfiguration/TopLevelFolders/Folder")

我得到以下结果:

type             Name        ServerName
----             ----        ----------
SqlServerFolder  MSDB        .         
FileSystemFolder File System     

所以我尝试运行这样的东西:

$xmlFile.SelectNodes("/DtsServiceConfiguration/TopLevelFolders/Folder[@type='SqlServerFolder']")

但它不返回任何结果。我怎样才能抓住这个特定的节点,以便我可以删除它?

【问题讨论】:

    标签: xml powershell


    【解决方案1】:

    使用local-name() XPath 函数按其本地名称 (type) 过滤 xsi:type 属性:

    $xmlFile.SelectSingleNode("/DtsServiceConfiguration/TopLevelFolders/Folder[@*[local-name()='type' and . ='SqlServerFolder']]")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-31
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多