Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 10.02.2024
Сообщений: 122

Нежелательное задвоение при парсинге XML

10.02.2024, 08:00. Показов 2959. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. У меня проблема при парсинге XML. Суть в том что большинство файлов которые я обрабатываю имеют структуру:
заказ (номер) - товарная накладная (номер) - товар один или много. В данном случае все норм.
Но есть некоторые документы где в заказе две товарных накладных. Изза этого товар задваивается на то количество, сколько товарных накладных. Взгляните на файл пожалуйста, станет понятно, там оба варианта.
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[xml]$xml = Get-Content C:\Users\пк\Downloads\2.xml
$list = @()
$list = $NULL
foreach ($Doc in $xml.GetElementsByTagName('Документы'))
{
    foreach ($Orders in $Doc.GetElementsByTagName('Заказы'))
    {
        foreach ($Order in $Orders.GetElementsByTagName('Заказ'))
        {
            foreach ($TN in $order.GetElementsByTagName('ТоварнаяНакладная'))
            {
            foreach ($TT in $order.GetElementsByTagName('ТорговаяТочка'))
            {
            foreach ($Products in $order.GetElementsByTagName('Товары'))
            {
                foreach ($Product in $Products.GetElementsByTagName('Товар'))
                {
                           
                           $list += [PSCustomObject]@{
                                ТорговыйАгент = $TT.ТорговыйАгент
                                Номенклатура = $Product.Номенклатура
                                НомерЗаказа = $Order.НомерЗаказа
                            }
                 }
             }
             }
             }
        }
    }
 
}
$list
Задача: Если в заказе две или больше товарных накладных, то их номера должны быть перечислены через запятую в, а товары не задваиватся.
Пните в правильном направлении.
Вложения
Тип файла: 7z 2.7z (843 байт, 22 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.02.2024, 08:00
Ответы с готовыми решениями:

Ошибка при парсинге XML
Досталась XML'ка с ошибкой, каждое случайно число строк (зависимость не искали), появляется какой то не понятный символ с кодом 0xc (так...

Кириллица при парсинге XML
Приветствую всех! Пишу программу на Android. В программе закачиваю из интернета XML: <trk> <trkseg> <rtept...

Ошибка при парсинге XML
День добрый имеется вот такой xml: <?xml version="1.0"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ...

46
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
29.02.2024, 14:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sergey020487 Посмотреть сообщение
самое медленное в шеле это конвеер. а самое быстрое это форич
есть такое дело...
1
 Аватар для volodin661
7093 / 2324 / 353
Регистрация: 10.12.2013
Сообщений: 8,012
29.02.2024, 14:18
Цитата Сообщение от YuS_2 Посмотреть сообщение
а чем конвейер Вас пугает?
конвейер, как общеизвестно, на самом деле замедляет,
но powershell-то сам по себе вообще не про скорость.

Добавлено через 4 минуты
( упреждая вопрос "А про что же он ? ", отвечаю: Про красоту; реализация решения мало чем отличается от художественного рассказа на обычном англ. языке )
1
0 / 0 / 0
Регистрация: 10.02.2024
Сообщений: 122
29.02.2024, 14:18  [ТС]
А что там на тему медленного =+?
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
29.02.2024, 14:21
Цитата Сообщение от sergey020487 Посмотреть сообщение
А что там на тему медленного =+?
А Вы обратите внимание на мой код, как там массив $arr создается
1
0 / 0 / 0
Регистрация: 10.02.2024
Сообщений: 122
29.02.2024, 14:44  [ТС]
YuS_2, "А че так можно было" Круто, сейчас протестирую

Добавлено через 20 минут
YuS_2, Спасибо, работает намного лучше
0
2806 / 504 / 121
Регистрация: 26.09.2020
Сообщений: 952
Записей в блоге: 5
29.02.2024, 23:50
Цитата Сообщение от sergey020487 Посмотреть сообщение
работает намного лучше
Насколько лучше, в литрах миллисекундах?
А где обещанный 50/100 Мб-ный XML?
measure

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Measure-Command -Expression {
    $path = 'f:\downloads\2.xml'
    [xml] $xml = gc $pth -enc utf8
    $xml.selectnodes("//Заказ") | ForEach-Object {
        $zak = $_
        $zak.товары.товар|%{
            [pscustomobject]@{
                'IDorder' = $zak.номерзаказа
                'DATEorder' = $zak.Датазаказа
                'NumTN' = $zak.товарнаянакладная.номер -join ','
                'DateTN' = $zak.товарнаянакладная.дата -join ','
                'Nomenclature' = $_.номенклатура
                'Bonus' = $_.Бонус
            }
        }
    }
}
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Measure-Command {
    $pth = 'f:\downloads\2.xml'
    [xml]$xml = gc $pth -enc utf8
    foreach ($item in $xml.selectnodes("//Заказ")){
        foreach ($i in $item.товары.товар){
            [pscustomobject]@{
                'IDorder' = $item.номерзаказа
                'DATEorder' = $item.Датазаказа
                'NumTN' = $item.товарнаянакладная.номер -join ','
                'DateTN' = $item.товарнаянакладная.дата -join ','
                'Nomenclature' = $i.номенклатура
                'Bonus' = $i.Бонус
            }
        }
    }
}
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Measure-Command -Expression {
    $path = 'f:\downloads\2.xml'
    $xml  = [xml]::new()
 
    $xml.Load($path)
 
    $xml.Документы.Заказы.Заказ.ForEach({
        $Заказ = $PSItem
        $Заказ.Товары.Товар.ForEach({
            [PSCustomObject] @{
                'IDorder'      = $Заказ.НомерЗаказа
                'DATEorder'    = $Заказ.ДатаЗаказа
                'NumTN'        = $Заказ.ТоварнаяНакладная.Номер -join ','
                'DateTN'       = $Заказ.ТоварнаяНакладная.Дата -join ','
                'Nomenclature' = $_.Номенклатура
                'Bonus'        = $_.Бонус
            }
        })
    })
}
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
05.03.2024, 14:04
Цитата Сообщение от sergey020487 Посмотреть сообщение
самое медленное в шеле это конвеер. а самое быстрое это форич
есть такое дело...
__________________
Есть несколько типов форичей и они по скорости отличаются довольно значительно
но емнип пайп быстрее 2х из 3х форичей, а с 3м сравним по скорости

$arr.foreach() - быстро
foreach($a in $b){} - быстро если не учитывать скорость получения $b. Если учитывать то получется медленно
... | foreach {} достаточно быстрый, но может быть быстрее за счет параллелизма которого обычно нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2024, 14:04

неверная кодировка при парсинге xml
доброго времени суток сделал парсинг xml допустим есть 2 сайта domain.com - где лежит некий news.xml(данные зашифрованы Base64) и...

Ошибка при парсинге xml с BeautifulSoup
Небходимо спарсить страницу http://econym.org.uk/gmap/states.xml Что-то делаю не так. Объект BS создается и выводится. А вот пройтись...

Вытащить атрибут при парсинге xml
День добрый, надо распарсить xml документ и все получилось, кроме одного: не могу вытащить атрибут у одного из тегов тег такой ...

Ошибка при парсинге xml файла
Добрый день! При парсинге xml файла возникает ошибка, при чем возникает по середине процесса Часть файла разбирает, а по середине...

Ошибка при парсинге большого XML (190МБ)
Здравствуйте. При переносе магазина на другой vps сервер столкнулся с ошибкой в парсере xml файла прайса: Fatal error: Uncaught exception...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
47
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru