2016-09-09 2 views
0

Ну, это сложная задача для моего опыта использования. Если кто-то может помочь, это будет здорово.CSV импорт синтаксический анализ в дереве xml

Что у меня есть:

$csvdata = Import-CSV 'file.csv' 

| Location    | Description 
| /Texas/Bryan   | Pond Anup 
| /Texas/Bryan   | Pond Charlie 
| /Texas/Killen/  | Lake Snoopy 

пример: output.xml

<groups> 
    <group name="Texas"> 
     <site name="Bryan">Pond Anup</site> 
    </group> 
</groups> 

То, что я пытаюсь сделать, это цикл через импорт CSV и сделайте следующее:

  • Если Техаса не существует, создайте
  • Если Техас существует, но не Брайан, создайте c Хильд в Техас, как Брайан
  • Если оба существуют добавить ребенка к Bryan как сайт узла

Я новичок в PowerShell, и это не имеет ничего общего с нашей эры, как я видел много примеров там для этого. Я надеюсь, что есть уже созданный скрипт или командлет, который я могу вызвать.

Благодаря

ответ

0

Вот основной цикл и логики вы должны были бы использовать для достижения этой цели:

$csvdata = Import-CSV "file.csv" 
$outfile = "output.xml" 

"<groups>" | Out-File $outfile #start groups 

$lastGroup = "" 
$lastSite = "" 

$csvdata | foreach { 
    $group = ($_.Location.Split('/'))[1] 
    $site = ($_.Location.Split('/'))[2] 
    $child = $_.Description 
    if ($group -ne $lastGroup) #if we're not in the same group 
    { 
     if ($lastGroup -ne "") {" </group>" | Out-File $outfile -Append } 
     " <group name=`"" + $group + "`">" | Out-File $outfile -Append 
    } 
    if ($site -ne $lastSite) #if we're not in the same site 
    { 
     if ($lastSite -ne "") {"  </site>" | Out-File $outfile -Append} 
     "  <site name=`"" + $site + "`">" | Out-File $outfile -Append 
    } 
    # now write child: 
    "   <child name=`"" + $child + "`"></child>" | Out-File $outfile -Append 

    $lastGroup = $group 
    $lastSite = $site 
} 
#write final end tags 
"  </site>" | Out-File $outfile -Append 
" </group>" | Out-File $outfile -Append 
"</groups>" | Out-File $outfile -Append #end groups 

код даст вам такой вывод:

<groups> 
    <group name="Texas"> 
     <site name="Bryan"> 
      <child name="Pond Anup"></child> 
      <child name="Pond Charlie"></child> 
     </site> 
     <site name="Killen"> 
      <child name="Lake Snoopy"></child> 
     </site> 
    </group> 
</groups> 

Надеемся это заставляет вас начать в правильном направлении.