我有一个由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>
我面临的问题是每个服务器都具有相同的标记,这就是为什么我需要通过其子节点标识正确的服务器的原因。
谢谢你的帮助。
您可以尝试从大父级删除父级节点,如下所示:
$XMLPassWord.ParentNode.ParentNode.RemoveChild($XMLPassWord.ParentNode)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句