Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/64: Рейтинг темы: голосов - 64, средняя оценка - 4.95
22 / 18 / 4
Регистрация: 28.07.2015
Сообщений: 167

Парсинг XML

05.02.2019, 10:13. Показов 13477. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро!
Может быть вопрос плевый, но я никак не решу его.
Есть файл xml (фото структуры во вложении). Как его привести к плоскому виду?
т.е. создать pscustomobject где будет следующая информация
Country ID , Contract Id, File name, Multipl, Source, Document type.


Что мной было сделано:

PowerShell
1
2
3
4
5
$xml_finish = [xml](Get-Content $file)
 
$xml_finish.Orders.ChildNodes #Вот так могу получить первый уровень
 
$xml_finish.Orders.ChildNodes.files.childnodes #вот так второй.
А как это объединить в один объект?
Миниатюры
Парсинг XML  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2019, 10:13
Ответы с готовыми решениями:

Парсинг XML
Ребят, нужна помощь по парсингу XML. Есть кусок содержимого XML: <?xml version="1.0" encoding="UTF-8"?> ...

Парсинг XML файла
Возникла необходимость получить данные из XML файла генерирующегося 1Ской. Структура файла XML: <Работники> <Работник> ...

Парсинг xml и удаление папок
Есть список определенных папок в XML. Есть папка в которой очень много папок. Как можно спарсить xml и переместить только те папки что...

42
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
05.02.2019, 20:50
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от KDE777 Посмотреть сообщение
$arr = foreach
а, ну так да... и время сопоставимо получается:
12,33788066
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
05.02.2019, 20:50
Цитата Сообщение от YuS_2
Ведь решение от KDE777, как раз, на нем реализовано...
Его решение состоит в том, чтобы загнать в массив упорядоченный словарь, который к тому же приводится к типу PSCustomObject. А уж после, когда массив этого безобразия сформирован, оный передается по конвейеру альясу командлела Format-Table. Отсюда тормоза. Конвейер хоть и удобная вещь, но довольно затратен особенно в плане поступления\передачи внушительных объемов данных. Отчасти проблему может решить отказ от использования конвейера как такового в пользу параметров вроде -InputObject, однако этим параметром располагают далеко не все командлеты. Впрочем, даже если бы они и были в каждом из последних, тормоза бы определенно были в виду их "индивидуальной" логической нагрузки. Вот здесь и выходят на сцену ранспейсы. Что это такое и с чем едят, объяснять не шибко хочется, так как поста в пару десятков строк явно не хватит на их объяснения. Замечу лишь, что в сущности они реализуют эдакий параллелизм (помните Workflow?) и известны со времен еще PS2.
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
05.02.2019, 21:04
Цитата Сообщение от greg zakharov Посмотреть сообщение
оный передается по конвейеру альясу командлела Format-Table. Отсюда тормоза.
не, там тормоза вот в этом:
PowerShell
1
$list += ...
это работает быстро на маленьких массивах, но если элементов много... ну, хотя бы 10000 и более, то время формирования массива резко возрастает...
Цитата Сообщение от greg zakharov Посмотреть сообщение
Конвейер хоть и удобная вещь, но довольно затратен особенно в плане поступления\передачи внушительных объемов данных.
В этом случае конвейер не виноват.

Цитата Сообщение от greg zakharov Посмотреть сообщение
помните Workflow?
Ещё бы, отличная вещь! Вот только из PS Core его вырезали напрочь и сказали, что поддерживаться более не будет... гады.
Цитата Сообщение от greg zakharov Посмотреть сообщение
так как поста в пару десятков строк явно не хватит на их объяснения.
Ну, будет время, может чего-нибудь напишется?
Все равно, ведь интересно было бы почитать и возможно, применять...
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
05.02.2019, 21:16
Цитата Сообщение от KDE777 Посмотреть сообщение
Среднее ms из 10 замеров, файл ~11K строк
Не знаю, почему так разнятся результаты, но ради интереса:
Среднее сек. из 5 замеров, файл ~100K строк
Кликните здесь для просмотра всего текста
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"YuS_2"
(1..5|%{(measure-command{
function custom-obj ($cttid,$ctyid,$files) {
    foreach ($file in $files){
        [pscustomobject]@{
            'IDCountry' = $ctyid
            'IDContract' = $cttid
            'FName' = $file.file_name
            'Multipl' = $file.multipl
            'IDSource' = $file.source_id
            'IDDocType'=$file.document_type_id
        }
    }
}
 
$pth = 'test.xml'
 
[xml]$xml = gc $pth -enc utf8
$arr = $xml.selectnodes("//Order")|%{custom-obj $_.contract_id $_.country_id $_.files.file}
$arr|ft
}).totalseconds}|measure -aver).average
''
"greg zakharov"
(1..5|%{(measure-command{
$arr = Select-Xml -Path test.xml -XPath //Files/File | ForEach-Object {
   Select-Object -InputObject $_.Node -Property @{
      N='Coutry_Id';E={$_.ParentNode.ParentNode.Country_Id}
   }, @{
      N='Contract_Id';E={$_.ParentNode.ParentNode.Contract_Id}
   }, File_name, Multipl, Source_Id, Document_Type_Id
}
$arr|ft
}).totalseconds}|measure -aver).average
''
"greg zakharov+KDE777"
(1..5|%{(measure-command{
(Select-Xml -Path test.xml -XPath //Files/File).Node | `
select @{N='Coutry_Id';E={$_.ParentNode.ParentNode.Country_Id}}, `
@{N='Contract_Id';E={$_.ParentNode.ParentNode.Contract_Id}},`
File_name,Multipl,Source_Id,Document_Type_Id | ft -a
}).totalseconds}|measure -aver).average
''
"KDE777"
(1..5|%{(measure-command{
[xml]$xml = Get-Content test.xml
 
$list = @()
 
$list = foreach ($order in $xml.GetElementsByTagName('Order'))
{
    foreach ($file in $order.GetElementsByTagName('File'))
    {
        [PSCustomObject][ordered]@{
            Country_Id       = $order.Country_Id
            Contract_Id      = $order.Contract_Id
            File_name        = $file.File_name
            Multipl          = $file.Multipl
            Source_Id        = $file.Source_Id
            Document_Type_Id = $file.Document_Type_Id
        }
    }
}
 
$list | ft -a
}).totalseconds}|measure -aver).average


Code
1
2
3
4
5
6
7
8
9
10
11
YuS_2
12,27506382
 
greg zakharov
14,61516094
 
greg zakharov+KDE777
15,5375988
 
KDE777
13,02403784
файл прилагаю.
Вложения
Тип файла: rar test.rar (729 байт, 1 просмотров)
0
 Аватар для KDE777
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
05.02.2019, 21:21
Цитата Сообщение от YuS_2 Посмотреть сообщение
но ради интереса
В одних вариантах ft, а в других ft -a
Возможно и -a не бесплатно...
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
05.02.2019, 21:25
YuS_2,
Ну, будет время, может чего-нибудь напишется?
Все равно, ведь интересно было бы почитать и возможно, применять..
Могу дать ссылку на пример, где я немного его использовал, я про Runspace.
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
05.02.2019, 21:45
Цитата Сообщение от YuS_2 Посмотреть сообщение
не, там тормоза вот в этом:
PowerShellВыделить код
1
$list += ...
Чтобы не быть голословным. Для наглядности:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$cnt = 1000
 
measure-command{
$arr = @()
for ($i=0;$i -le $cnt;$i++) {
    $arr += "test $i"
}
}
 
measure-command{
$arr = new-object system.collections.generic.list[system.string]
for ($i=0;$i -le $cnt;$i++) {
    $arr.add("test $i")
}
}
при увеличении числа элементов (для наглядности, хотя бы 30000 и более), время обоих вариантов становится сильно отличным друг от друга, а при достаточно малом числе $cnt, они приблизительно сравнимы...

Добавлено через 1 минуту
Цитата Сообщение от v_svitere Посмотреть сообщение
Могу дать ссылку на пример, где я немного его использовал, я про Runspace.
Да, спасибо, заранее. Было бы интересно.

Добавлено через 2 минуты
Цитата Сообщение от KDE777 Посмотреть сообщение
Возможно и -a не бесплатно...
Ну, может быть. Я-то код просто скопировал и не задумывался, что -avtosize будет уж сильно влиять...

Добавлено через 9 минут
Вот без -a
Code
1
2
3
4
5
6
7
8
9
10
11
YuS_2
12,58604528
 
greg zakharov
15,35615162
 
greg zakharov+KDE777
22,88573254
 
KDE777
13,37556556
0
 Аватар для KDE777
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
05.02.2019, 22:04
Цитата Сообщение от YuS_2 Посмотреть сообщение
не задумывался, что -avtosize будет уж сильно влиять
Там тысячи строк (>15K) в итоговой таблице, ширину всех нужно проверить прежде чем выровнять... Но проверять влияние именно -a лень

Ещё в одном случае создаётся [PSCustomObject][ordered], а в другом [PSCustomObject] - может тоже влияет.

И ещё, не знаю обратили внимание - я приводил результаты в TotalMilliseconds, а ваши в TotalSeconds

Привёл все варианты к выводу на экран таблицы (ft) и прогнал ваш файл 3 раза у себя - результаты всё равно очень сильно гуляют:

Кликните здесь для просмотра всего текста

Code
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
33
34
35
36
37
38
39
YuS_2
11,0852638
 
greg zakharov
10,75336268
 
greg zakharov+KDE777
7,6227304
 
KDE777
7,50556934
 
---
 
YuS_2
12,12062442
 
greg zakharov
15,69131762
 
greg zakharov+KDE777
11,10663616
 
KDE777
11,43028198
 
---
 
YuS_2
9,62328204
 
greg zakharov
13,20554426
 
greg zakharov+KDE777
8,919205
 
KDE777
8,04253096


Кликните здесь для просмотра всего текста
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
cls
"YuS_2"
(1..5|%{(measure-command{
function custom-obj ($cttid,$ctyid,$files) {
    foreach ($file in $files){
        [pscustomobject]@{
            'IDCountry' = $ctyid
            'IDContract' = $cttid
            'FName' = $file.file_name
            'Multipl' = $file.multipl
            'IDSource' = $file.source_id
            'IDDocType'=$file.document_type_id
        }
    }
}
 
[xml]$xml = gc test.xml -enc utf8
$xml.selectnodes("//Order")|%{custom-obj $_.contract_id $_.country_id $_.files.file} | ft
}).totalseconds}|measure -aver).average
''
"greg zakharov"
(1..5|%{(measure-command{
Select-Xml -Path test.xml -XPath //Files/File | ForEach-Object {
   Select-Object -InputObject $_.Node -Property @{
      N='Coutry_Id';E={$_.ParentNode.ParentNode.Country_Id}
   }, @{
      N='Contract_Id';E={$_.ParentNode.ParentNode.Contract_Id}
   }, File_name, Multipl, Source_Id, Document_Type_Id
} | ft
}).totalseconds}|measure -aver).average
''
"greg zakharov+KDE777"
(1..5|%{(measure-command{
(Select-Xml -Path test.xml -XPath //Files/File).Node | `
select @{N='Coutry_Id';E={$_.ParentNode.ParentNode.Country_Id}}, `
@{N='Contract_Id';E={$_.ParentNode.ParentNode.Contract_Id}},`
File_name,Multipl,Source_Id,Document_Type_Id | ft
}).totalseconds}|measure -aver).average
''
"KDE777"
(1..5|%{(measure-command{
[xml]$xml = Get-Content test.xml
 
$arr = foreach ($order in $xml.GetElementsByTagName('Order'))
{
    foreach ($file in $order.GetElementsByTagName('File'))
    {
        [PSCustomObject]@{
            Country_Id       = $order.Country_Id
            Contract_Id      = $order.Contract_Id
            File_name        = $file.File_name
            Multipl          = $file.Multipl
            Source_Id        = $file.Source_Id
            Document_Type_Id = $file.Document_Type_Id
        }
    }
}
 
$arr | ft
}).totalseconds}|measure -aver).average


Добавлено через 6 минут
Думаю, что автор темы получил предостаточно примеров
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
05.02.2019, 22:22
Цитата Сообщение от KDE777 Посмотреть сообщение
Там тысячи строк (>15K) в итоговой таблице, ширину всех нужно проверить прежде чем выровнять... Но проверять влияние именно -a лень
уже проверил, влияния никакого не оказывает, на экран ведь вывода, как такового, не осуществляется же.

Цитата Сообщение от KDE777 Посмотреть сообщение
не знаю обратили внимание - я приводил результаты в TotalMilliseconds, а ваши в TotalSeconds
это я видел и учитывал, потому и писал выше про количество строк...

Цитата Сообщение от KDE777 Посмотреть сообщение
результаты всё равно очень сильно гуляют
да и неважно это, они вполне сопоставимы... возможно, какое-то влияние оказывает конфигурация железа, загруженность процессора другими задачами и т.п.
0
 Аватар для KDE777
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
05.02.2019, 22:55
Цитата Сообщение от YuS_2 Посмотреть сообщение
на экран ведь вывода, как такового, не осуществляется же
Однако, если совсем убрать | ft, тогда у меня результат улучшается более чем в 2 раза...
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
05.02.2019, 22:59
Цитата Сообщение от KDE777 Посмотреть сообщение
Однако, если совсем убрать | ft, тогда у меня результат улучшается более чем в 2 раза...
ну да, команда-то присутствует, она выполняется... но вывода на экран нет, поэтому, видимо, и подбор ширины столбцов не осуществляется... как предположение. В любом случае, в тесте параметр -autosize на скорость выполнения не оказал никакого влияния.
0
 Аватар для KDE777
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
05.02.2019, 23:13
YuS_2, убрал ft для экономии времени - все варианты сохраняют результаты в массив и ещё немного подправил вариант, который вы назвали "greg zakharov+KDE777"

Итого, теперь вариант "MIX" у меня всегда лидирует. Вывод: либо наглядность, либо скорость. greg zakharov, спасибо за наводку

Кликните здесь для просмотра всего текста
Code
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
YuS_2
4,71518728
 
KDE777
5,29439566
 
MIX
3,11280062
 
---
 
YuS_2
5,94272786
 
KDE777
6,93294332
 
MIX
4,09772706
 
---
 
YuS_2
6,1506038
 
KDE777
5,2179053
 
MIX
3,02684324


Кликните здесь для просмотра всего текста

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
cls
"YuS_2"
(1..5|%{(measure-command{
 
function custom-obj ($cttid,$ctyid,$files) {
    foreach ($file in $files){
        [pscustomobject]@{
            'IDCountry' = $ctyid
            'IDContract' = $cttid
            'FName' = $file.file_name
            'Multipl' = $file.multipl
            'IDSource' = $file.source_id
            'IDDocType'=$file.document_type_id
        }
    }
}
 
[xml]$xml = gc test.xml
$arr = $xml.selectnodes("//Order")|%{custom-obj $_.contract_id $_.country_id $_.files.file}
 
}).totalseconds}|measure -aver).average
''
"KDE777"
(1..5|%{(measure-command{
 
[xml]$xml = gc test.xml
$arr = foreach ($order in $xml.GetElementsByTagName('Order'))
{
    foreach ($file in $order.GetElementsByTagName('File'))
    {
        [PSCustomObject]@{
            Country_Id       = $order.Country_Id
            Contract_Id      = $order.Contract_Id
            File_name        = $file.File_name
            Multipl          = $file.Multipl
            Source_Id        = $file.Source_Id
            Document_Type_Id = $file.Document_Type_Id
        }
    }
}
 
}).totalseconds}|measure -aver).average
''
"MIX"
(1..5|%{(measure-command{
 
$arr = (Select-Xml -Path test.xml -XPath //File).Node | select `
@{N='Coutry_Id';        E={$_.Node.ParentNode.ParentNode.Country_Id}},
@{N='Contract_Id';      E={$_.Node.ParentNode.ParentNode.Contract_Id}},
File_name,Multipl,Source_Id,Document_Type_Id
 
}).totalseconds}|measure -aver).average
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
06.02.2019, 10:35
YuS_2,
Могу дать ссылку на пример, где я немного его использовал, я про Runspace.
Отдельный поток

Вот, здесь я приводил пример использования, однако не скажу, что это хороший код.
Вообще про Runspace мало, где что толкового написано.
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
06.02.2019, 14:01
YuS_2, операция приведения, в зависимости от того, что к чему приводится, может оказаться порой достаточно затратной задачей. Приведение к типу PSCustomObject чаще всего наименее затратная операция, так как в принципе любой объект может выступать в его роли, и, скажем, если выражение:
PowerShell
1
$i = [PSCustomObject]3
вполне допустимо, с точки зрения логики оно излишне. На выходе все равно ведь получим Int32.
Хэш в PS - это полиморф. В том плане, что он вполне может выступать и как собственно хэш, и как словарь, а потому операция приведения к упорядоченному словарю по сути и не является приведением, скорее - установкой маркера сохранения порядка задаваемых значений. Однако, с уверенностью утверждать, дескать, что на времени исполнения в данном случае операции приведения не влияют совсем, довольно опрометчиво, - какие-то доли секунд, но все же отыгрывают от общей производительности. А в чем, собственно, тогда задница? А задница как раз таки в упаковке хэша. В смысле $list += ... Изначально задан массив нулевой длинны $list = @(), а операция +=, во-первых, должна перераспределить память под упаковываемый объект (что довольно затратно), во-вторых, собственно упаковать объект. Если же сделать нечто вроде:
PowerShell
1
2
3
4
5
$list = foreach (...) {
   foreach (...) {
      ...
   }
}
выделение памяти с последующей упаковкой объектов будут произведены единожды, что, конечно же, быстрее, но по-прежнему затратно.

KDE777, тогда не ответил, отвечаю сейчас. С тех пор, как обнаружил "радар" утечек куч в винде, в котором последняя фиксировала неладное как в powershell.exe, так и pwsh.exe, стал внимательнее относиться к памяти. И это не какая-то блажь, а вполне себе повод задуматься над безопасностью: переполнение в куче можно обыграть так, чтобы запустить шелл-код со всеми вытекающими.

v_svitere, работу ранспейсов проще постичь через ILDasm и эксперименты с кодом. Это личное мнение, с которым некоторые MVP категорически несогласны.

Не по теме:

В свей книге, замороженной на этапе печати, отдельную главу посвятил детальному рассмотрению ранспейсов. Именно поэтому влом переписывать уже все ранее написанное сюда.

1
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
06.02.2019, 19:33
Цитата Сообщение от greg zakharov Посмотреть сообщение
А задница как раз таки в упаковке хэша. В смысле $list += ... Изначально задан массив нулевой длинны $list = @(), а операция +=, во-первых, должна перераспределить память под упаковываемый объект (что довольно затратно), во-вторых, собственно упаковать объект.
Это-то, как раз, понятно. Непонятно другое:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$cnt = 30000
 
measure-command{
$arr = @()
for ($i=0;$i -le $cnt;$i++) {
    $arr += "test $i"
}
}
 
measure-command{
$arr = new-object system.collections.generic.list[system.string]
for ($i=0;$i -le $cnt;$i++) {
    $arr.add("test $i")
}
}
 
measure-command {
$arr = new-object system.text.stringbuilder
for ($i=0;$i -le $cnt;$i++){
    $null = $arr.append("test $i")
}
}
соответственно:
TotalSeconds : 72,0670799

TotalSeconds : 0,3339159

TotalSeconds : 0,2506026
чем $arr+=... хуже чем $arr.add('...') или $arr.append('...'), причем так значительно?
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
06.02.2019, 20:40
Если кратко, метод Append типа StringBuilder по сути инкапсулирует небезопасный код (насколько помню, там вызывается метод wstrcpy(char*, char*, int)); метод Add типа List, если ничего не путаю, также оперирует адресами, а не значениями. Ну, а про += было написано выше что к чему. Можно лишь добавить, что наряду с упаковкой и перераспределением памяти, происходит множество callvirt, а это также тормоза. Если изменить код:
PowerShell
1
2
3
4
5
6
7
$cnt = 30000
 
measure-command{
  $arr = for ($i=0;$i -le $cnt;$i++) {
    "test $i"
  }
}
Разница будет разительной.
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
06.02.2019, 22:35
Цитата Сообщение от greg zakharov Посмотреть сообщение
метод Append типа StringBuilder по сути инкапсулирует небезопасный код (насколько помню, там вызывается метод wstrcpy(char*, char*, int)); метод Add типа List, если ничего не путаю, также оперирует адресами, а не значениями.
Т.е. под данные выделяется первый свободный блок памяти и заполняется, по мере приращения массива, если я правильно понял? И возможно, однократное перераспределение памяти, по завершении формирования того массива. В отличие от $arr+= , где перераспределение происходит после каждого приращения. Ну, так по логике получается, иначе другого объяснения не видно.

Цитата Сообщение от greg zakharov Посмотреть сообщение
Разница будет разительной.
Да это-то понятно, раз массив формируется однократно, после получения всех данных... что, собственно и подтверждают тесты.
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
07.02.2019, 12:39
YuS_2, как-то так. В принципе оператор += можно "перегрузить" через динамический метод и опкоды, в шестерке ко всему прочему можно задействовать указатели, но, во-первых, это потребует дополнительный код пусть и без создания динамической сборки в домене приложений, во-вторых, требует некоторых знаний в области IL, а последний, как известно, многие предпочитают обходить стороной. Ну и само слово "перегрузка" здесь не случайно в кавычках, ибо в сущности вышеописанный подход реализует метод, а не перегружает оператор (таковая в PS не предусмотрена).
А вообще, мы уже достаточно сильно отклонились от курса темы. Может лучше создать отдельную тему, посвященную производительности кода и попросить господ модераторов эту тему "пригвоздить"?!
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
07.02.2019, 14:38
Цитата Сообщение от greg zakharov Посмотреть сообщение
Может лучше создать отдельную тему, посвященную производительности кода и попросить господ модераторов эту тему "пригвоздить"?!
Возможно, так будет лучше. И кроме того, это было бы полезно для всех, делиться знаниями по оптимизации кода. Ведь powershell, чем и хорош, что совсем нелинейный он для многих задач. А вот какой из методов/способов лучше подходит для той или иной задачи, по производительности именно - в общую копилку можно собирать, чтобы всегда была возможность пользоваться топиком как справочником.
0
0 / 0 / 0
Регистрация: 26.02.2019
Сообщений: 2
04.10.2019, 20:41
Здравствуйте!
Прошу помочь в решении похожей задачи как у ТС.
Только мне необходимо получить record_id, если я запрашиваю _acme-challenge (желательно вывести только одну запись)
Получаю его такими командами:
PowerShell
1
2
3
4
5
6
7
8
$records=(
iwr https://pddimp.yandex.ru/api2/admin/dns/list `
    -Headers @{'PddToken' = 'DFGDFGDFGGHGHJHD35Q2ZTIZWEFQOGUQXG4ZHWQ3N3O4CO3DJGXA'} `
    -Body @{'domain'='domain.ru'}
).Content
$json = ConvertFrom-Json -InputObject $records
[xml]$xml = ConvertTo-Xml -Depth 2000 -InputObject $json -NoTypeInformation
$xrecords=$xml.OuterXml
Пытался делать так, но увы, получаю пустой вывод:
PowerShell
1
(($xml).SelectNodes("//Property").InnerText | Where-Object {$_.subdomain -match "_acme-challenge"}).record_id
Вложения
Тип файла: zip pddimp.zip (1.9 Кб, 1 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2019, 20:41

Парсинг XML-файла с помощью LINQ to XML
Здрасивуйте. Трабл никак не могу понять в чем дело не могу считать инфу с XML login, getWorkersOUs надо записать в textBox а все c...

Парсинг XML
Как его на плюсах лучше сделать?

Парсинг Xml
Добрый день. Помогите распарсить Xml документ. Это справочник ОКПД. Весь Xml во вложения не влезет. Вот вырезка из него чтобы...

парсинг xml
Я новичок. Не получается никак пропарсить xml. Подскажите что не так. Я хочу получить содержимое тега teg3. Просто присвоить переменной...

Парсинг XML
подгрузить фаил из сети получается. Пытаюсь пропарсить но на экран ничего не выводится в чем ощибка? <?php $dom = new...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru