none
Выборка из файла RRS feed

  • Вопрос

  • Добрый день. Не совсем понимаю, как решить следующую задачу. Есть 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


    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


    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


    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

    24 октября 2017 г. 13:36
    Модератор