Powershell XML删除ChildNode“Date”早于一个月的节点

问题描述 投票:0回答:2

我想找到日期早于特定日期的所有“消息”节点并删除它们。

如果我正在使用$result = $xml.transcript.messages.message.date | Select-String -Pattern "2018-09-10"我可以找到我正在寻找的日期节点,但我认为$ result只是一个字符串,我无法访问父节点并删除它。

<transcript>
 <messages>
  <message>
   <to>user1</to>
   <from>user2/Spark</from>
   <body>Message Bla Bla Bla</body>
   <date>2018-09-05 11:56:50.961 MESZ</date>
  </message>
  <message>
   <to>user1</to>
   <from>user2/Spark</from>
   <body>>Message Bla Bla Bla</body>
   <date>2018-09-10 15:26:50.299 MESZ</date>
  </message>
  <message>
   <to>user2</to>
   <from>user1/Spark</from>
   <body>>Message Bla Bla Bla</body>
   <date>2018-09-12 09:38:01.997 MESZ</date>
  </message>
  <message>
   <to>user1/Spark</to>
   <from>user2/Spark</from>
   <body>>Message Bla Bla Bla</body>
   <date>2018-09-12 09:38:19.382 MESZ</date>
  </message>
 </messages>
</transcript>

对于那些了解Spark IM的人,我基本上只想每天通过Powershell删除一次旧邮件。

在此先感谢您的帮助!

xml powershell automation
2个回答
0
投票

这将返回message节点:

$result = $xml.transcript.messages.message | Where-Object {$_.date -like "2018-09-10*"}

0
投票

你的xml无效:>中的body应该被转义。幸运的是,PowerShell并没有太严格的限制。这应该工作:

$xml = [xml]@'
<transcript>
 <messages>
  <message>
   <to>user1</to>
   <from>user2/Spark</from>
   <body>Message Bla Bla Bla</body>
   <date>2018-08-05 11:56:50.961 MESZ</date>
  </message>
  <message>
   <to>user1</to>
   <from>user2/Spark</from>
   <body>>Message Bla Bla Bla</body>
   <date>2018-09-10 15:26:50.299 MESZ</date>
  </message>
  <message>
   <to>user2</to>
   <from>user1/Spark</from>
   <body>>Message Bla Bla Bla</body>
   <date>2018-09-12 09:38:01.997 MESZ</date>
  </message>
  <message>
   <to>user1/Spark</to>
   <from>user2/Spark</from>
   <body>>Message Bla Bla Bla</body>
   <date>2018-09-12 09:38:19.382 MESZ</date>
  </message>
 </messages>
</transcript>
'@
$xml.PreserveWhitespace = $true

$xml.SelectNodes('//message') | where { ([DateTime]$_.date.Substring(0, 23)) -lt [DateTime]::Now.AddMonths(-1) } | % {
    $xml.transcript.messages.RemoveChild($_)
}
© www.soinside.com 2019 - 2024. All rights reserved.