Powershell - 使用CSV数据在ForEach循环中分离元素

时间:2017-07-31 05:39:45

标签: xml powershell csv foreach

我目前正在尝试创建一个电话本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文件中的每个值创建单独的元素标记?

1 个答案:

答案 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)