Лучший отвечающий
Выборка из файла

Вопрос
-
Добрый день. Не совсем понимаю, как решить следующую задачу. Есть XML файл, в нем есть следующие значения:
<item>
<position>2</position>
<article>00962</article>
<barcode>4607012370150</barcode>
<quantity>1.000</quantity>
<price>39.90</price>
<total>39.10</total>
<stockId>0</stockId>
<enterType>0</enterType>
</item>и следующие:
<item>
<position>2</position>
<article>34359</article>
<barcode>4607093662540</barcode>
<quantity>1.000</quantity>
<price>99.00</price>
<total>99.00</total>
<stockId>0</stockId>
<enterType>0</enterType>
<egaisBarcode>22N000002xxxKWL7S28S84</egaisBarcode>
</item>т.е. единственное различие между ними - наличие строки egaisBarcode. Как мне проще всего выгрести все значения item, содержащие строку egaisBarcode в отдельный файл?
Заранее спасибо за уделенное время и внимание.
24 октября 2017 г. 11:07
Ответы
-
дайте пример XML
Если за пример взять одного файла взять
<item>
<position>2</position>
<article>34359</article>
<barcode>4607093662540</barcode>
<quantity>1.000</quantity>
<price>99.00</price>
<total>99.00</total>
<stockId>0</stockId>
<enterType>0</enterType>
<egaisBarcode>22N000002xxxKWL7S28S84</egaisBarcode>
</item>Первый вариант будет выглядеть так
$raw = Get-Content C:\test\test.xml -Raw $raw -split '<item>' | select-string -pattern 'egaisBarcode'
A второй вариант будет выглядеть так:$xml = [xml](Get-Content C:\test\test.xml) $xml.ChildNodes.egaisBarCode
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 24 октября 2017 г. 12:03
- Помечено в качестве ответа Сергей Леонов Ктулху 2-ой 24 октября 2017 г. 13:12
24 октября 2017 г. 12:01Модератор
Все ответы
-
вариант 1 (тупой слегка)
$FileContent -split '<item>' | select-string -pattern 'egaisBarcode'
# $FileContent должен быть строкой
вариант 2 (более правильный)
$FileContent | Where {$_.item.egaisBarcode -ne $Null}
# $FileContent должен импортирован как XML
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 24 октября 2017 г. 11:23
24 октября 2017 г. 11:21Модератор -
В первом случае он мне просто выдает все строки, содержащие egaisBarcode. Во втором вообще ничего не происходит:) или я импортирую неверно, указываю
$FileContent = Get-Content 001.xml
24 октября 2017 г. 11:52 -
дайте пример XML
Если за пример взять одного файла взять
<item>
<position>2</position>
<article>34359</article>
<barcode>4607093662540</barcode>
<quantity>1.000</quantity>
<price>99.00</price>
<total>99.00</total>
<stockId>0</stockId>
<enterType>0</enterType>
<egaisBarcode>22N000002xxxKWL7S28S84</egaisBarcode>
</item>Первый вариант будет выглядеть так
$raw = Get-Content C:\test\test.xml -Raw $raw -split '<item>' | select-string -pattern 'egaisBarcode'
A второй вариант будет выглядеть так:$xml = [xml](Get-Content C:\test\test.xml) $xml.ChildNodes.egaisBarCode
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 24 октября 2017 г. 12:03
- Помечено в качестве ответа Сергей Леонов Ктулху 2-ой 24 октября 2017 г. 13:12
24 октября 2017 г. 12:01Модератор -
первый вариант все ок вывел, спасибо огромное:) только не совсем понял, почему второй вариант что первый что второй раз ничего не выводил совсем. Спасибо большое.24 октября 2017 г. 13:12
-
первый вариант все ок вывел, спасибо огромное:) только не совсем понял, почему второй вариант что первый что второй раз ничего не выводил совсем. Спасибо большое.
Если вы в качестве примера возьмете тот кусок XML который я привел ранее то должны увидеть на экране "22N000002xxxKWL7S28S84".
Если вам нужен весь блок то
$xml | Where {$_.ChildNodes.egaisBarcode -ne $Null}
Если хотите более детальный ответ дайте входные параметры. Так же обратите внимание что -Split съедает строку '<Item>'
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 24 октября 2017 г. 13:38
24 октября 2017 г. 13:36Модератор