gpt4 book ai didi

xml - 循环遍历节点并更改树结构xml

转载 作者:行者123 更新时间:2023-12-02 23:32:59 29 4
gpt4 key购买 nike

我正在尝试仅使用我需要使用 powershell 的一些东西将 xml 文件从一种结构更改为另一种结构。源文件如下所示:

<?xml version="1.0" encoding="iso-8859-1"?>
<Files xmlns="http://testnamespace.com">
<File>
<Naam>filenameone.XML</Naam>
<Type>testtype</Type>
<Lines>15</Lines>
</File>
<File>
<Name>filenametwo.XML</Name>
<Type>Journaalposten</Type>
<Lines>3</Lines>
</File>
<Amount>0,00</Amount>
<Indication>D</Indication>
</Files>
这个想法是把它变成这样:
<?xml version="1.0" encoding="iso-8859-1"?>
<Files xmlns="http://testnamespace.com">
<File>filenameone.XML</File>
<File>filenametwo.XML</File>
</Files>
我目前已准备好获取文件和所有这些,我只是想更改 xml 结构并保存文件。我不知道是编写一个全新的文件还是遍历元素并在我进行时更改它们更好,这就是我目前拥有的:
$transportFile = Get-ChildItem -Path $currentLocation -Filter *transport*
[xml]$xml = Get-Content -Path $transportFile
$nsm = New-Object Xml.XmlNamespaceManager($xml.NameTable)
$nsm.AddNamespace('ns', $xml.DocumentElement.NamespaceURI)
$ParametersNode = $xml.SelectNodes('//ns:Files', $nsm)

foreach($Node in $ParametersNode){
#Do something to transform the current node
}
$xml.Save('test.xml')

最佳答案

我建议你用另一种方式来做。
创建一个新的空白文件,在旧文件中搜索目标信息并将其附加到新文件中。像这样的东西:

$oldfile = [xml]'[[[your xml above]]]'

$newfile = [xml]'<?xml version="1.0" encoding="iso-8859-1"?>
<Files xmlns="http://testnamespace.com">
</Files>'

$targets = $oldfile.SelectNodes("//*[local-name()='Files']/*[local-name()='File']/*[local-name()='Name']/text()").InnerText

foreach ($target in $targets)
{
$entry = $newfile.CreateElement("File","http://testnamespace.com")
$entry.InnerText=$target
$newfile.Files.AppendChild($entry)
}
echo $newfile.OuterXml
输出(抱歉格式化,但可以稍后修复):
<?xml version="1.0" encoding="iso-8859-1"?>
<Files xmlns="http://testnamespace.com">
<File>filenameone.XML</File><File>filenametwo.XML</File>
</Files>

关于xml - 循环遍历节点并更改树结构xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62820324/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com