2016-01-29 2 views
-1

У меня есть файл XML, как это:
Создать файлы под xml?

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<Item> 
<Field Name="Filename">x1</Field> 
<Field Name="Year">y1</Field> 
<Field Name="Name">z1</Field> 
</Item> 
<Item> 
<Field Name="Filename">xn</Field> 
<Field Name="Year">yn</Field> 
<Field Name="Name">zn</Field> 
</Item> 

для каждого элемента, с помощью PowerShell, я хотел бы создать файл XML только с информацией, касающейся его. Как мне это сделать?

+0

Есть ли что-то вам пытались сделать это случайно? Мы хотели помочь улучшить код. – Matt

+0

Вы ожидаете, что ваш вывод также будет XML (заголовок?) – Matt

+0

Да. С заголовком xml – 8139david

ответ

0

Вы можете захватить все <Item> узлы с SelectNodes(), а затем от каждой из них выбрать Filename поле с SelectSingleNode():

$xml = [xml]@' 
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<Items> 
<Item> 
<Field Name="Filename">x1</Field> 
<Field Name="Year">y1</Field> 
<Field Name="Name">z1</Field> 
</Item> 
<Item> 
<Field Name="Filename">xn</Field> 
<Field Name="Year">yn</Field> 
<Field Name="Name">zn</Field> 
</Item> 
</Items> 
'@ 

foreach($item in $xml.SelectNodes('//Item')) 
{ 
    $Filename = $item.SelectSingleNode('//Field[@Name = "Filename"]').InnerText 

    # create your new xml document here, import $Item and save to $Filename 
} 
+0

Большое спасибо, я попробую! – 8139david

0

Вы могли бы попробовать что-то вроде этого:

$xml = [xml]@' 
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<Items> 
<Item> 
<Field Name="Filename">x1</Field> 
<Field Name="Year">y1</Field> 
<Field Name="Name">z1</Field> 
</Item> 
<Item> 
<Field Name="Filename">xn</Field> 
<Field Name="Year">yn</Field> 
<Field Name="Name">zn</Field> 
</Item> 
</Items> 
'@ 

$xml.Items.Item | ForEach-Object { 
    $filename = $_.SelectSingleNode("Field[@Name='Filename']").innertext 
    $file = New-Object xml 
    $file.InsertBefore($file.CreateXmlDeclaration("1.0","UTF-8","yes"),$file.DocumentElement) | Out-Null 
    $file.AppendChild($file.ImportNode($_,$true)) | Out-Null 
    $file.Save("C:\users\frode\Desktop\$($filename).xml") 
} 
Смежные вопросы