【发布时间】:2019-09-27 00:43:30
【问题描述】:
我一直在尝试准备一个 powershell 脚本,它将所有 XML 文件重命名为 XML 节点之一的值:
$items = Get-ChildItem "C:\test\" -Filter *.xml
foreach ($item in $items) {
$x = New-Object -TypeName 'System.XML.XMLDocument'
$x.Load($item.FullName)
$OutputFileName = $x.SelectSingleNode("//CreationDate").InnerText
$OutputFileName = $OutputFileName -replace "-", "_"
$OutputFileName = $OutputFileName -replace ":", "_"
$OutputFileName = $OutputFileName -replace "T", "_"
Rename-Item $item.Fullname -NewName "$OutputFileName.xml"
}
我遇到的问题是$x 总是空白,似乎我无法正确提取 XML 节点的值。
XML 结构(请记住<ActualStartDate> 节点在文件之间更改,其余名称相同)
<?xml version="1.0" encoding="utf-8"?>
<Request xmlns="link">
<ActualStartDate>
<TypeCode>0400</TypeCode>
<VerNumber>2</VerNumber>
<CreationDate>2012-01-31T14:33:35</CreationDate>
</ActualStartDate>
</Request>
【问题讨论】:
-
你能发布你的xml文件结构吗
-
我写了这样的东西,并且可以从 Xml 读取数据。 $items = Get-ChildItem "D:\TESTBI" -Filter *.xml foreach($item in $item) { Write-Output $item.FullName $x = New-Object -TypeName XML $x.Load($item. FullName) $OutputFileName = $x.SelectSingleNode("//Connection").InnerText 写入输出 $OutputFileName }
-
@Roshan XML 示例结构已添加,抱歉,首先应该这样做
-
你还没有关闭 Typecode 标签
-
我没有看到代码有任何问题。只需检查 XML 标签。由于您正在搜索 CreationDate 节点在哪里并不重要。它直接搜索CreationDate的第一个节点。
标签: xml powershell rename