Powershell - 使用 CSV 数据分隔 ForEach 循环中的元素



我目前正在尝试创建一个电话簿xml生成器,我们可以用来轻松发送到FTP服务器并访问。

目前我有以下Powershell脚本;

----------
$csvPath = "C:UsersnwongDesktopIDN_EXT.csv" 
[System.Xml.XmlDocument] $xmlDocument = New-Object System.Xml.XmlDocument
$directory = $xmlDocument.CreateElement("Directory")
$title_tag = read-host "Enter a title for your phonebook.."
$title = $xmlDocument.CreateElement("Title")
$menu_item = $xmlDocument.CreateElement("MenuItem")
$prompt = $xmlDocument.CreateElement("Prompt")
$ext = $xmlDocument.CreateElement("URI")
$xmlDocument.AppendChild($directory)
$directory.AppendChild($title)
$title.AppendChild($xmlDocument.CreateTextNode($title_tag))
ForEach ($e in (Import-CSV -Path $csvPath)) {  
$directory.AppendChild($menu_item)
$menu_item.AppendChild($prompt)
$prompt.AppendChild($xmlDocument.CreateTextNode($e.Name))
$menu_item.AppendChild($ext)
$ext.AppendChild($xmlDocument.CreateTextNode($e.Extension))
}

$xmlDocument.Save("C:UsersnwongDesktoptest.xml")
----------

目前,脚本生成以下 XML 文件

----------
<Directory>
<Title>Test</Title>
<MenuItem>
<Prompt>OperatorKate ShanahanAtiq RAthman AIrfani DFelicity 
PDeswanto</Prompt>
<URI>50005001500250035004500550069</URI>
</MenuItem>
</Directory>
---------

我正在寻找的结果是这样的,因此它使用 ForEach 循环中找到的每个值创建元素标签;

---------
<MenuItem>
<Prompt>Operator</Prompt>
<URI>625000</URI>
</MenuItem>
<MenuItem>
<Prompt>Kate Shanahan</Prompt>
<URI>625001</URI>
</MenuItem>
<MenuItem>
<Prompt>Atiq R.</Prompt>
<URI>625002</URI>
</MenuItem>
<MenuItem>
<Prompt>Athman A.</Prompt>
<URI>625003</URI>
</MenuItem>`
----------

我应该有另一个循环来生成相同的 ForEach 循环并拆分每个单独的值,还是有更简单的方法来为 CSV 文件中的每个值创建单独的元素标记?

Yo 必须在您的循环中创建节点,请尝试以下操作:

$csvPath = "C:UsersnwongDesktopIDN_EXT.csv" 
$xmlPath = "C:UsersnwongDesktoptest.xml"
$title_tag = read-host "Enter a title for your phonebook.."
[System.Xml.XmlDocument] $xmlDocument = New-Object System.Xml.XmlDocument
$directory = $xmlDocument.CreateElement("Directory")
$xmlDocument.AppendChild($directory)
$title = $xmlDocument.CreateElement("Title")
$title.AppendChild($xmlDocument.CreateTextNode($title_tag))
$directory.AppendChild($title)
Import-CSV -Path $csvPath | %{
$menu_item = $xmlDocument.CreateElement("MenuItem")
$prompt = $xmlDocument.CreateElement("Prompt")
$prompt.AppendChild($xmlDocument.CreateTextNode($_.Name))
$menu_item.AppendChild($prompt)
$ext = $xmlDocument.CreateElement("URI")
$ext.AppendChild($xmlDocument.CreateTextNode($_.Extension))
$menu_item.AppendChild($ext)
$directory.AppendChild($menu_item)
}
$xmlDocument.Save($xmlPath)

最新更新