我目前正在尝试创建一个电话本xml生成器,我们可以使用它轻松发送到FTP服务器并进行访问。
目前我有以下Powershell脚本;
----------
$csvPath = "C:\Users\nwong\Desktop\IDN_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:\Users\nwong\Desktop\test.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文件中的每个值创建单独的元素标记?
答案 0 :(得分:0)
哟必须在你的循环中创建节点,试试这个:
$csvPath = "C:\Users\nwong\Desktop\IDN_EXT.csv"
$xmlPath = "C:\Users\nwong\Desktop\test.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)