PowerShell:如果子节点符合特定条件,则删除xml节点

mariu5

我有一个由FileZilla创建的xml文件,其中包含多个ftp服务器的连接详细信息。

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<FileZilla3>
    <Servers>
        <Server>
            <Host>host</Host>
            <Port>1</Port>
            <Protocol>3</Protocol>
            <Type>0</Type>
            <User>SomeUser</User>
            <Pass>p455w0rd</Pass>
            <Logontype>1</Logontype>
            <TimezoneOffset>0</TimezoneOffset>
            <PasvMode>MODE_DEFAULT</PasvMode>
            <MaximumMultipleConnections>0</MaximumMultipleConnections>
            <EncodingType>Auto</EncodingType>
            <BypassProxy>0</BypassProxy>
            <Name>Server1</Name>
            <Comments>Comment</Comments>
            <LocalDir />
            <RemoteDir />
            <SyncBrowsing>0</SyncBrowsing>Server1
        </Server>
        <Server>
            <Host>host</Host>
            <Port>1</Port>
            <Protocol>3</Protocol>
            <Type>0</Type>
            <User>SomeOtherUser</User>
            <Pass>passw0rd</Pass>
            <Logontype>1</Logontype>
            <TimezoneOffset>0</TimezoneOffset>
            <PasvMode>MODE_DEFAULT</PasvMode>
            <MaximumMultipleConnections>0</MaximumMultipleConnections>
            <EncodingType>Auto</EncodingType>
            <BypassProxy>0</BypassProxy>
            <Name>Server2</Name>
            <Comments />
            <LocalDir />
            <RemoteDir />
            <SyncBrowsing>0</SyncBrowsing>Server2
        </Server>
    </Servers>
</FileZilla3>

现在,我正在处理一个脚本,以选择ftp帐户,然后将其从此xml文件中删除。这是我到目前为止的内容:

$SiteManager = "C:\Temp\SiteManager.xml"

[XML]$SiteManagerXMLContent = Get-Content $SiteManager -Encoding UTF8

#Account that gets removed
$FTPAccName     = "Server1"
$FTPAccUserName = "SomeUser"
$FTPAccPassWord = "p455w0rd"
$FTPAccComment  = "Comment"

ForEach($Server in $SiteManagerXMLContent.FileZilla3.Servers)
{
    $XMLServerName = $Server.SelectSingleNode("//Name[.='$FTPAccName']")
    $XMLUserName = $Server.SelectSingleNode("//User[.='$FTPAccUserName']")
    $XMLPassWord = $Server.SelectSingleNode("//Pass[.='$FTPAccPassWord']")
    $XMLComment = $Server.SelectSingleNode("//Comment[.='$FTPAccComment']")

    if($XMLServerName.'#text' -eq $FTPAccName -and $XMLUserName.'#text' -eq $FTPAccUserName -and $XMLPassWord.'#text' -eq $FTPAccPassWord -and $XMLComment.'#text' -eq $FTPAccComment)
    {
        $XMLPassWord.ParentNode.RemoveAll()
    }
}

$SiteManagerXMLContent.Save($sitemanager)

这将删除所选服务器的所有子节点,但不删除父节点:这是我的目标。我想删除整个节点。

运行此脚本后,我的xml如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FileZilla3>
  <Servers>
    <Server>
    </Server>
    <Server>
      <Host>host</Host>
      <Port>1</Port>
      <Protocol>3</Protocol>
      <Type>0</Type>
      <User>SomeOtherUser</User>
      <Pass>passw0rd</Pass>
      <Logontype>1</Logontype>
      <TimezoneOffset>0</TimezoneOffset>
      <PasvMode>MODE_DEFAULT</PasvMode>
      <MaximumMultipleConnections>0</MaximumMultipleConnections>
      <EncodingType>Auto</EncodingType>
      <BypassProxy>0</BypassProxy>
      <Name>Server2</Name>
      <Comments />
      <LocalDir />
      <RemoteDir />
      <SyncBrowsing>0</SyncBrowsing>Server2
        </Server>
  </Servers>
</FileZilla3>

我面临的问题是每个服务器都具有相同的标记,这就是为什么我需要通过其子节点标识正确的服务器的原因。

谢谢你的帮助。

har07

您可以尝试从大父级删除父级节点,如下所示:

$XMLPassWord.ParentNode.ParentNode.RemoveChild($XMLPassWord.ParentNode)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PowerShell:如果子节点符合特定条件,则删除xml节点

来自分类Dev

如果子节点包含特定字符串,则删除XML节点

来自分类Dev

如果子节点具有特定属性,则删除父节点

来自分类Dev

如果子节点等于数组值,则删除 XML 节点

来自分类Dev

当子节点满足特定条件时删除节点

来自分类Dev

如果子节点为空,则删除父节点

来自分类Dev

如果子节点没有值,则删除父节点

来自分类Dev

Neo4j/Cypher - 如果不同的节点满足特定条件,则设置节点

来自分类Dev

如果属性具有特定值,则删除XML节点

来自分类Dev

在XML模式中使用断言在特定条件满足时不允许节点出现

来自分类Dev

如何删除所有符合特定条件的Divs的样式?

来自分类Dev

删除特定的xml节点Javascript

来自分类Dev

从xml中删除特定节点

来自分类Dev

遍历对象列表并指向与特定条件匹配的节点

来自分类Dev

尝试从XML中删除节点(如果该节点包含具有特定名称的子节点,但出现错误)

来自分类Dev

如果(条件)从链接列表中删除节点

来自分类Dev

如果子节点元素相等,如何添加父节点?

来自分类Dev

根据XML中的条件从父节点中删除子节点

来自分类Dev

Firebase 数据库:如果子对象具有特定值,则检索节点

来自分类Dev

在Powershell中删除重复的XML节点组

来自分类Dev

在PowerShell中删除重复的XML节点

来自分类Dev

如何删除特定的 XML 子节点

来自分类Dev

寻找符合特定条件的元素

来自分类Dev

更新符合特定条件的数组元素

来自分类Dev

符合特定条件的数据分组

来自分类Dev

计算符合特定条件的独特组合

来自分类Dev

如何计算符合特定条件的值?

来自分类Dev

找到符合特定条件的可能组合

来自分类Dev

查询所有符合特定条件的

Related 相关文章

  1. 1

    PowerShell:如果子节点符合特定条件,则删除xml节点

  2. 2

    如果子节点包含特定字符串,则删除XML节点

  3. 3

    如果子节点具有特定属性,则删除父节点

  4. 4

    如果子节点等于数组值,则删除 XML 节点

  5. 5

    当子节点满足特定条件时删除节点

  6. 6

    如果子节点为空,则删除父节点

  7. 7

    如果子节点没有值,则删除父节点

  8. 8

    Neo4j/Cypher - 如果不同的节点满足特定条件,则设置节点

  9. 9

    如果属性具有特定值,则删除XML节点

  10. 10

    在XML模式中使用断言在特定条件满足时不允许节点出现

  11. 11

    如何删除所有符合特定条件的Divs的样式?

  12. 12

    删除特定的xml节点Javascript

  13. 13

    从xml中删除特定节点

  14. 14

    遍历对象列表并指向与特定条件匹配的节点

  15. 15

    尝试从XML中删除节点(如果该节点包含具有特定名称的子节点,但出现错误)

  16. 16

    如果(条件)从链接列表中删除节点

  17. 17

    如果子节点元素相等,如何添加父节点?

  18. 18

    根据XML中的条件从父节点中删除子节点

  19. 19

    Firebase 数据库:如果子对象具有特定值,则检索节点

  20. 20

    在Powershell中删除重复的XML节点组

  21. 21

    在PowerShell中删除重复的XML节点

  22. 22

    如何删除特定的 XML 子节点

  23. 23

    寻找符合特定条件的元素

  24. 24

    更新符合特定条件的数组元素

  25. 25

    符合特定条件的数据分组

  26. 26

    计算符合特定条件的独特组合

  27. 27

    如何计算符合特定条件的值?

  28. 28

    找到符合特定条件的可能组合

  29. 29

    查询所有符合特定条件的

热门标签

归档