PDA

Показать полную графическую версию : [решено] Поиск текста в xml и запись в файл.


voleja
15-04-2015, 22:15
Добрый вечер, подскажите пожалуйста, может быть уже есть готовое решение, задача следующая.
Есть каталог на "B:\20150415\" в котором содержится 20+ файлов *.xml и др. файлов (имена файлов уникальные).
Содержимое каждого xml-файла следующее:
<?xml version="1.0"?>
-<Package>
-<HEADER>
<Package_id>1</Package_id>
<From>Older</From>
</HEADER>
-<OBJECTS>
-<OBJECT name="Fix">
-<PROPERTIES>
<PROPERTY name="ID">1</PROPERTY>
<PROPERTY name="FIO">Andrew</PROPERTY>
</PROPERTIES>
</OBJECT>
</OBJECTS>
</Package>
Необходимо обойти все файлы *.xml каталога "B:\20150415\" и получить значения из каждого файла <PROPERTY name="ID"> и <PROPERTY name="FIO">, записав его на следующую строку созданного файла (csv или xls).
Где первое значение из примера:
1;Andrew
105;Andy
итд

Foreigner
15-04-2015, 22:56
voleja,

get-childitem 'B:\20150415' *.xml | foreach {

[xml] $xml = get-content $_.fullname

$id = ($xml.package.objects.object.properties.property | ? { $_.name -eq 'id' }).'#text'
$fio = ($xml.package.objects.object.properties.property | ? { $_.name -eq 'fio' }).'#text'

add-content 1.csv "$id;$fio"
}

Kazun
15-04-2015, 23:02
Select-Xml -path *.xml "//PROPERTIES" | Foreach {$_.Node.Property."#text" -join ","} | Out-File resilt.csv

Georgio
15-04-2015, 23:25
Для полноты коллекции: gci 'B:\20150415\*.xml'|%{([xml](gc $_.fullname)).SelectNodes('//PROPERTY').InnerText -join ';'}|Out-File 'example.csv'.

voleja
16-04-2015, 06:09
спасибо, но
Select-Xml -path *.xml "//PROPERTIES" | Foreach {$_.Node.Property."#text" -join ","} | Out-File resilt.csv »
и
gci 'B:\20150415\*.xml'|%{([xml](gc $_.fullname)).SelectNodes('//PROPERTY').InnerText -join ';'}|Out-File 'example.csv' »
не решают задачи, т. к выгружают не по формату, а выгружают все - весь текст, можно их привести к поиску и записи в файл только значений в секциях <PROPERTY name="ID"> и <PROPERTY name="FIO"> и записать в csv в виде
1;Andrew
105;Andy
найденные значения <PROPERTY name="ID"> и <PROPERTY name="FIO"> из каждого файла в одной строке с разделителем, следующие значения, найденные в другом файле - переход на др. строку?

Georgio
16-04-2015, 11:29
не решают задачи, т. к выгружают не по формату, а выгружают все - весь текст, можно их привести к поиску и записи в файл только значений в секциях <PROPERTY name="ID"> и <PROPERTY name="FIO"> и записать в csv в виде
1;Andrew
105;Andy »


Обновите PowerShell до версии 4.0. Другие версии я не поддерживаю:).




© OSzone.net 2001-2012