IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Temps de traitement xml_to_cvs.


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Profil pro
    dsi
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dsi

    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 13
    Points
    13
    Par défaut Temps de traitement xml_to_cvs.
    Bonjour à tous,

    Je suis sur un script qui à pour objectif de convertir un fichier XML en CSV.
    Je dois faire cette conversion pour faciliter une intégration SSIS, qui plante régulièrement sur ce fichier ...

    Mon problème est le temps de traitement ... 45 mn ! Que puis je faire pour améliorer ce temps de traitement, sachant que je n'ai pas la main sur la structure du XML.
    Le fichier XML fait 2.2M de lignes.
    Il contient en particulier un 'item' avec 96 'sous items', d'ou la sous boucle ...

    Grand merci à tous pour votre expertise et vos remarques.

    Bonne journée.

    Voici mon script :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    #Convertir un fichier xml to csv
    function xml_to_csv() {
    	[xml]$xmlfull = (Get-Content \\........\XMLCatalogue\HW7841296.xml -Encoding UTF8)
    	#$xmlfull.catalog.data.item | ConvertTo-Csv -NoTypeInformation -Delimiter ";" | Set-Content "C:\Users\utran\Desktop\XMLCatalogue\new.csv" -Encoding UTF8
    	#Out-file -FilePath "C:\TEST_CSV.csv" -Encoding Ascii -InputObject $xmlfull
    	$itemsNode = $xmlfull.SelectNodes('//item')
    	# Tableau pour stocker l'ensemble les items
    	$items = [PsCustomObject]@()
    	# Parcourrir tous les items dans la liste
    	$a = 0
    	foreach($item_xml in $itemsNode) {
    		Write-host $a 
    		$extened_fields = [PsCustomObject]@()
    		#Analyse ensemble les extended fields
    		$extened_fields_xml = $item_xml.ExtendedFields
    		foreach($extened_field in $extened_fields_xml.field) {
    			$extened_field = [PsCustomObject]@{
    				name = $extened_field.name
    				'#text' = $extened_field.'#text'
    			}
    			$extened_fields += $extened_field
    		}
    		#$extended_fields_result = ""
    		#for($i = 0; $i -lt $extened_fields.name.count; $i++) {
    		#	if ($extened_fields[$i].'#text' -eq $null) {
    		#			$extened_fields[$i].'#text' = ""
    		#	}
    		#	$extended_fields_result += $extened_fields[$i].name + " = " + $extened_fields[$i].'#text' + "`n"
     
    		#}
     
    		#Création d'un objet 
    		$item_ajout = [PsCustomObject]@{
    			ACTION_CODE = $item_xml.ACTION_CODE
    			LANGUAGE_CODE = $item_xml.LANGUAGE_CODE
    			DESCRIPTION_SHORT = $item_xml.DESCRIPTION_SHORT
    			BUYER_KEYWORDS = $item_xml.BUYER_KEYWORDS
    			SUPPLIER_ITEM_NUMBER = $item_xml.SUPPLIER_ITEM_NUMBER
    			SUPPLIER_NAME = $item_xml.SUPPLIER_NAME
    			MANUFACTURER_ITEM_NUMBER = $item_xml.MANUFACTURER_ITEM_NUMBER 
    			MANUFACTURER_NAME = $item_xml.MANUFACTURER_NAME
    			MIDDLE_DESCRIPTION = $item_xml.MIDDLE_DESCRIPTION
    			DESCRIPTION_LONG = $item_xml.DESCRIPTION_LONG
    			PRICE_CURRENCY_1 = $item_xml.PRICE_CURRENCY_1
    			PRICE_1 = $item_xml.PRICE_1
    			UNIT_OF_MEASURE = $item_xml.UNIT_OF_MEASURE
    			QUANTITY = $item_xml.QUANTITY
    			CONTENT_UNIT = $item_xml.CONTENT_UNIT
    			ITEM_STATUS = $item_xml.ITEM_STATUS
    			PRICE_2 = $item_xml.PRICE_2
    			LOWER_BOUND_PRICE_2 = $item_xml.LOWER_BOUND_PRICE_2
    			PRICE_3 = $item_xml.PRICE_3
    			LOWER_BOUND_PRICE_3 = $item_xml.LOWER_BOUND_PRICE_3
    			PRICE_4 = $item_xml.PRICE_4
    			LOWER_BOUND_PRICE_4 = $item_xml.LOWER_BOUND_PRICE_4
    			PRICE_5 = $item_xml.PRICE_5
    			LOWER_BOUND_PRICE_5 = $item_xml.LOWER_BOUND_PRICE_5
    			LIST_PRICE1 = $item_xml.LIST_PRICE1
    			MINIMUM_ORDER_QUANTITY = $item_xml.MINIMUM_ORDER_QUANTITY
    			ORDER_QUANTITY_INTERVAL = $item_xml.ORDER_QUANTITY_INTERVAL
    			DELIVERY_TIME = $item_xml.DELIVERY_TIME
    			PRICE_VALID_FROM = $item_xml.PRICE_VALID_FROM
    			PRICE_VALID_TO = $item_xml.PRICE_VALID_TO
    			EXTRA_LINK_C1 = $item_xml.EXTRA_LINK_C1
    			CUSTOMER_PICTURE = $item_xml.CUSTOMER_PICTURE
    			LABEL_C2 = $item_xml.LABEL_C2
    			EXTRA_LINK_C2 = $item_xml.EXTRA_LINK_C2
    			LABEL_C3 = $item_xml.LABEL_C3
    			EXTRA_LINK_C3 = $item_xml.EXTRA_LINK_C3
    			LABEL_C4 = $item_xml.LABEL_C4
    			EXTRA_LINK_C4 = $item_xml.EXTRA_LINK_C4
    			EXTRA_LINK_C5 = $item_xml.EXTRA_LINK_C5
    			TAX_RATE = $item_xml.TAX_RATE
    			EAN = $item_xml.EAN
    			MANUFACTURER_COUNTRY = $item_xml.MANUFACTURER_COUNTRY 
    			CUSTOMER_SPECIFIC_FIELD5 = $item_xml.CUSTOMER_SPECIFIC_FIELD5
    			CUSTOMER_SPECIFIC_FIELD3 = $item_xml.CUSTOMER_SPECIFIC_FIELD3
    			CUSTOMER_SPECIFIC_FIELD6 = $item_xml.CUSTOMER_SPECIFIC_FIELD6
    			CLASSIFICATION_CODE = $item_xml.CLASSIFICATION_CODE
    			CUSTOMER_SPECIFIC_FIELD7 = $item_xml.CUSTOMER_SPECIFIC_FIELD7
    			CUSTOMER_SPECIFIC_FIELD8 = $item_xml.CUSTOMER_SPECIFIC_FIELD8
    			LABEL_TYPE_C6 = $item_xml.LABEL_TYPE_C6
    			EXTRA_LINK_C6 =$item_xml.EXTRA_LINK_C6
    			LABEL_C6 = $item_xml.LABEL_C6
    			LABEL_TYPE_C7 = $item_xml.LABEL_TYPE_C7
    			EXTRA_LINK_C7 = $item_xml.EXTRA_LINK_C7
    			LABEL_C7 = $item_xml.LABEL_C7
    			LABEL_TYPE_C8 = $item_xml.LABEL_TYPE_C8
    			EXTRA_LINK_C8 = $item_xml.EXTRA_LINK_C8
    			LABEL_C8 = $item_xml.LABEL_C8
    			LABEL_TYPE_C9 = $item_xml.LABEL_TYPE_C9
    			EXTRA_LINK_C9 = $item_xml.EXTRA_LINK_C9
    			LABEL_C9 = $item_xml.LABEL_C9
    			LABEL_TYPE_C10 = $item_xml.LABEL_TYPE_C10
    			EXTRA_LINK_C10 = $item_xml.EXTRA_LINK_C10
    			LABEL_C10 = $item_xml.LABEL_C10
    		}
     
    		#Ajout les properties extended fields dans l'objet
    		for($i = 0; $i -lt $extened_fields.name.count; $i++) {
    			$item_ajout | add-member Noteproperty $extened_fields[$i].name $extened_fields[$i].'#text'
    		}
    		$a = $a + 1
    		#$items += $item_ajout
    		$item_ajout  | Export-Csv -Path 'C:\Users\utran\Desktop\XMLCatalogue\testCSVUYDU.csv' -NoTypeInformation -Append -Encoding UTF8 -Force
    		Clear-Variable $extened_fields_xml
    		#item_add = $item_ajout | ConvertTo-Csv -NoTypeInformation -Delimiter ";"
    		#Out-file -FilePath "C:\Users\utran\Desktop\XMLCatalogue\testCSVUYDU.csv" -Encoding Ascii -InputObject $item_add -Append
    	}
    	$items = @()
    	#Out-file -FilePath "C:\Users\utran\Desktop\XMLCatalogue\testCSVUYDU.csv" -Encoding Ascii -InputObject $items
    	#$items | Export-Csv -Path 'C:\Users\utran\Desktop\XMLCatalogue\testCSVUYDU.csv' -NoTypeInformation -Encoding ascii
    }

    Ci-dessous un exemple d'item avec son sous item :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    <catalog>
    	<header>
    		<customer>407000133-0020</customer>
    		<supplier>HW7841295</supplier>
    	</header>
    	<data>
    		<item>
    			<ACTION_CODE></ACTION_CODE>
    			<LANGUAGE_CODE>fr</LANGUAGE_CODE>
    			<DESCRIPTION_SHORT>VAMINOLACT FL VERRE 1000 ML</DESCRIPTION_SHORT>
    			<BUYER_KEYWORDS>18,91</BUYER_KEYWORDS>
    			<SUPPLIER_ITEM_NUMBER>3400932998098</SUPPLIER_ITEM_NUMBER>
    			<SUPPLIER_NAME>FRESENIUS KABI</SUPPLIER_NAME>
    			<MANUFACTURER_ITEM_NUMBER>3400891237153</MANUFACTURER_ITEM_NUMBER>
    			<MANUFACTURER_NAME>-</MANUFACTURER_NAME>
    			<MIDDLE_DESCRIPTION>MELANGE AA PR NUTRITION PARENTERALE PEDIATRIQUE - FORME INJECTABLE 1 000ML</MIDDLE_DESCRIPTION>
    			<DESCRIPTION_LONG>-</DESCRIPTION_LONG>
    			<PRICE_CURRENCY_1>EUR</PRICE_CURRENCY_1>
    			<PRICE_1>0,000001</PRICE_1>
    			<UNIT_OF_MEASURE>EA</UNIT_OF_MEASURE>
    			<QUANTITY>1</QUANTITY>
    			<CONTENT_UNIT>EA</CONTENT_UNIT>
    			<ITEM_STATUS></ITEM_STATUS>
    			<PRICE_2></PRICE_2>
    			<LOWER_BOUND_PRICE_2></LOWER_BOUND_PRICE_2>
    			<PRICE_3></PRICE_3>
    			<LOWER_BOUND_PRICE_3></LOWER_BOUND_PRICE_3>
    			<PRICE_4></PRICE_4>
    			<LOWER_BOUND_PRICE_4></LOWER_BOUND_PRICE_4>
    			<PRICE_5></PRICE_5>
    			<LOWER_BOUND_PRICE_5></LOWER_BOUND_PRICE_5>
    			<LIST_PRICE1></LIST_PRICE1>
    			<MINIMUM_ORDER_QUANTITY>6</MINIMUM_ORDER_QUANTITY>
    			<ORDER_QUANTITY_INTERVAL></ORDER_QUANTITY_INTERVAL>
    			<DELIVERY_TIME>0</DELIVERY_TIME>
    			<PRICE_VALID_FROM>01.01.2020 00:00:00</PRICE_VALID_FROM>
    			<PRICE_VALID_TO>31.12.2022 00:00:00</PRICE_VALID_TO>
    			<EXTRA_LINK_C1></EXTRA_LINK_C1>
    			<CUSTOMER_PICTURE>Fresenius_Kabi.png</CUSTOMER_PICTURE>
    			<LABEL_C2></LABEL_C2>
    			<EXTRA_LINK_C2></EXTRA_LINK_C2>
    			<LABEL_C3></LABEL_C3>
    			<EXTRA_LINK_C3></EXTRA_LINK_C3>
    			<LABEL_C4></LABEL_C4>
    			<EXTRA_LINK_C4></EXTRA_LINK_C4>
    			<EXTRA_LINK_C5></EXTRA_LINK_C5>
    			<TAX_RATE>2,1</TAX_RATE>
    			<EAN></EAN>
    			<MANUFACTURER_COUNTRY></MANUFACTURER_COUNTRY>
    			<CUSTOMER_SPECIFIC_FIELD5></CUSTOMER_SPECIFIC_FIELD5>
    			<CUSTOMER_SPECIFIC_FIELD3>Médicaments</CUSTOMER_SPECIFIC_FIELD3>
    			<CUSTOMER_SPECIFIC_FIELD6>03</CUSTOMER_SPECIFIC_FIELD6>
    			<CLASSIFICATION_CODE>MED03</CLASSIFICATION_CODE>
    			<CUSTOMER_SPECIFIC_FIELD7></CUSTOMER_SPECIFIC_FIELD7>
    			<CUSTOMER_SPECIFIC_FIELD8></CUSTOMER_SPECIFIC_FIELD8>
    			<LABEL_TYPE_C6>A</LABEL_TYPE_C6>
    			<EXTRA_LINK_C6>LilleMDT.docx</EXTRA_LINK_C6>
    			<LABEL_C6>CHU Lille - Coordonnée de la filière</LABEL_C6>
    			<LABEL_TYPE_C7>U</LABEL_TYPE_C7>
    			<EXTRA_LINK_C7>https://www.uniha.org/marche/m_1631/</EXTRA_LINK_C7>
    			<LABEL_C7>Accéder au marché</LABEL_C7>
    			<LABEL_TYPE_C8></LABEL_TYPE_C8>
    			<EXTRA_LINK_C8></EXTRA_LINK_C8>
    			<LABEL_C8></LABEL_C8>
    			<LABEL_TYPE_C9></LABEL_TYPE_C9>
    			<EXTRA_LINK_C9></EXTRA_LINK_C9>
    			<LABEL_C9></LABEL_C9>
    			<LABEL_TYPE_C10></LABEL_TYPE_C10>
    			<EXTRA_LINK_C10></EXTRA_LINK_C10>
    			<LABEL_C10></LABEL_C10>
    			<ExtendedFields>
    				<field name="CUSTOMER_SPECIFIC_FIELD11"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD12">19,30711</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD13">Ferme</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD14">Alimentation</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD15"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD16"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD17">01/01/2020 - 31/12/2022</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD18">MEDICA LILLE</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD19"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD20">-</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD21">-</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD22"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD23"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD24"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD25"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD26"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD28"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD29"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD30"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD31"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD32"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD33"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD34"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD35"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD36"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD37"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD38"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD39"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD40"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD41">oui</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD42">6</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD43">Marché</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD44"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD45"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD46"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD47"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD48"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD49"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD50"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD51"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD52"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD53"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD54"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD55"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD56"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD57">B05BA01</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD58">-</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD59">SNAOG_2020 - M_1631</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD60">Disponible en CENTRALE d'ACHAT</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD61"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD62"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD63"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD64"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD65"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD66"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD67">00_UNIH 00_CATA</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD68">Lot 136 : MELANGE AA PR NUTRITION PARENTERALE PEDIATRIQUE - Sous lot 3 : FORME INJECTABLE 1 000ML</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD69">199435</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD70">-</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD71">stock</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD72"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD73"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD74"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD75">-</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD76"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD77"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD79">NUTRITION PARENTÉRALE ET SOLUTÉS MASSIFS/PETITES A</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD80">136</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD81">MELANGE AA PR NUTRITION PARENTERALE PEDIATRIQUE</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD82">3</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD83">FORME INJECTABLE 1 000ML</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD84"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD85"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD86"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD87"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD88"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD89"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD90"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD91"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD92"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD93"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD94"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD95"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD96"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD98"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD99"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD100"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD101"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD102"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD103"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD104"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD105"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD106"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD107"></field>
    				<field name="CUSTOMER_SPECIFIC_FIELD108">MED</field>
    				<field name="CUSTOMER_SPECIFIC_FIELD109">MEDICAMENT</field>
    			</ExtendedFields>
    		</item>

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Vu qu'il s'agit d'un problème de performance sur le traitement d'un ensemble peux tu poster un fichier complet XML pour test stp.
    Sur 1 item je ne suis pas sûr que nous constations et résolvions le souci.

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    J'ai un petite complexité sur le traitement, est ce que les items ont tous la même structure et possèdent les mêmes noms d'entrées (Name) ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Après étude, je te propose ceci

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function UnifyProperties {
        $InputCollected = @($Input)
        $Properties = $InputCollected | ForEach-Object {$_.PSObject.Properties.Name}
        $PropertiesDistinct = [string[]]([Linq.Enumerable]::Distinct([string[]]@($Properties), [System.StringComparer]::OrdinalIgnoreCase))
        $InputCollected | Select-Object @($PropertiesDistinct)
    }
     
    $content = Get-Content -LiteralPath "${PSScriptRoot}\test.xml" -Raw -Encoding UTF8
    $xmlfull = [xml]$content
     
    $Result = foreach($itemNode in $xmlfull.SelectNodes('//item'))
    {
        $ResultItem = [PsCustomObject] @{}
        $Nodes = @($itemNode.ChildNodes | Where-Object {$_.Name -ne "ExtendedFields"}) + @($item_xml.ExtendedFields.ChildNodes)
        $Nodes | ForEach-Object {
            Add-Member -InputObject $ResultItem -MemberType NoteProperty -Name $_.Name -Value $_.'#text'
        }
        $ResultItem
    }
     
    $Result | UnifyProperties | Export-Csv -Path "${PSScriptRoot}\testCSVUYDU.csv" -NoTypeInformation -Append -Encoding UTF8 -Force

  5. #5
    Membre à l'essai
    Profil pro
    dsi
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dsi

    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 13
    Points
    13
    Par défaut Super ! Merci pour vos retour.
    Bonsoir,

    Grand merci à vous pour ces retours. J'ai été bien pris mais me replonge dans le sujet.
    @ericlm128 je vais tester ton code et surtout le comprendre, je te fais un retour dessus demain.

    Je vais poster demain aussi un échantillon anonymisé comme demandé.

    Dans tous les cas merci !
    Vous tiens au courant.

    ZZ

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    il y a une coquille dans le nom de variable $item_xml, c’est $ItemNode.

    Pour info le xml d’exemple est mal formé.



    QQ remarques sur le code d’Eric :

    Je n’ai pas compris la présence de UnifyProperties.

    Pour ceci :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      $Result = foreach($itemNode in $xmlfull.SelectNodes('//item'))
      {
          $ResultItem = [PsCustomObject] @{}
         $Nodes = @($itemNode.ChildNodes | Where-Object {$_.Name -ne "ExtendedFields"}) + @($ItemNode.ExtendedFields.ChildNodes)
          $Nodes | ForEach-Object {
              Add-Member -InputObject $ResultItem -MemberType NoteProperty -Name $_.Name -Value $_.'#text'
         }
          $ResultItem
      }

    Etant dans l’optimisation on peut gagner, certes très peu, en temps de traitement :
    Il n’est pas nécessaire de parser une hashtable vide, ceci est équivalent :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
      [PsCustomObject]::New()

    Si l’on utilise pas la substitution de chaîne alors utiliser de simples quottes :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
      {$_.Name -ne ‘ExtendedFields’}
    On gagne très peu mais de nombreuse fois.


    Ensuite je me suis demandé si on pouvait essayer de simplifier, et peut être accélérer ce traitement en supprimant le Add-Member.
    Pour la construction du tableau $Nodes on évite la première boucle de recherche (je suppose la propriété ( le nœud XML) ‘ExtendedFields’ unique).

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    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
      $f='C:\temp\datas.xml'
     
     
     
      $content = Get-Content $f -Raw -Encoding UTF8
     
      $xmlfull = [xml]$content
     
     
      $Result = foreach($itemNode in $xmlfull.SelectNodes('//item'))
      {
                      $NodeProperties=@{}
                      $ExtendedFields=$ItemNode.ExtendedFields.ChildNodes
                      $ItemNode.RemoveChild($ItemNode['ExtendedFields']) > $Null
                      @($itemNode.ChildNodes,$ExtendedFields)|
     
                      ForEach-Object { 
                        $_|
                         ForEach-Object {
                                     $NodeProperties.Add($_.Name,$_.'#text')
                       }
                      }
          [PsCustomObject]$NodeProperties
      }
      $result
    On construit une hashtable, ce qui me semble similaire aux appels a Add-member, que l’on couple à la construction d’un PsObject.

    Pour RemoveChild on supprime la propriété mais pas l’objet qui est désormais référencé par $ExtendedFields.
    Et pour la boucle imbriquée je n’ai pas pris le temps de trouver mieux.

    Est-ce pertinent ? Je ne sais pas car je n’ai pas testé sur le fichier d’origine.

    Au mieux ce sera une autre manière de faire 😊

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Salut,

    Ah flûte la coquille ! Bien vu.

    Je pense qu'avant d'optimiser tu devrait essayer.

    Ok si tu préfère de simple quote, tu me fera un benchmark pour me montrer le gain stp 😋

    Je t'expliquerai plus en détail l'utilité de UnifyProperties (pas devant pc)
    Mais disons que l'ajout a un tableau de plusieurs objet powershell qui n'ont pas les mêmes noms de propriété génère des problèmes sur la sortie.
    D'où ma première question, est ce que tes items XML on tous la même structure ? Auquel cas nous pourrions nous en passer.

    Je regarderai les derniers points de detail

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je vois ce que tu veux dire pour la sauvegarde, suppression du noeud extended ça supprime le -eq
    Pourquoi pas si besoin, mais je pense que la différence sera imperceptible (mesurable ?)
    Par contre je ne comprend pas le double foreach-object

    Je n'ai pas encore pu tester sur un fichier représentatif.

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Il n’est pas nécessaire de parser une hashtable vide, ceci est équivalent

    Et ceci je ne comprend pas ce que tu veux dire.

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Salut,
    Je pense qu'avant d'optimiser tu devrait essayer.
    C'est à dire ? Essayer ton code ?
    Si c'est cela, la lecture suffit pour proposer ces améliorations. Oui on est d'accord elles sont minimes.
    Citation Envoyé par ericlm128 Voir le message
    Ok si tu préfère de simple quote, tu me fera un benchmark pour me montrer le gain stp 😋
    Ce n'est pas une préférence, le code C# recherche via l'AST une possible substitution.Alors je n'ai ni compilé ni tracé le projet pour en être certains, mais PS fait bien qq chose en plus pour une chaîne entre double quottes.
    Il s'agit donc ici de lui éviter de faire qq chose qui échouera tjr. C'est un peu comme si on nous demandait d'aller chercher du pain à 23h dans telle boulangerie, celle-ci existe bien mais cela ne sert à rien d'y aller. On en connait la raison.
    Le gain est comme je l'ai dit minime :
    #avec https://github.com/IISResetMe/PSProfiler

    Count Line Time Taken Statement
    ----- ---- ---------- ---------
    67 9 00:00.0058934 $Nodes = @($itemNode.ChildNodes | Where-Object {$_.Name -ne "ExtendedFields"}) + @($ItemNode.ExtendedFields.ChildNodes)
    67 9 00:00.0056760 $Nodes = @($itemNode.ChildNodes | Where-Object {$_.Name -ne 'ExtendedFields'}) + @($ItemNode.ExtendedFields.ChildNodes)

    1 8 00:00.0000162 $ResultItem = [PsCustomObject] @{}
    1 8 00:00.0000112 $ResultItem = [PsCustomObject]::new()
    Encore une fois je suis d'accord, ici on optimise des broutilles.Le gain est dépendant du nombre d'itération.

    Citation Envoyé par ericlm128 Voir le message
    Mais disons que l'ajout a un tableau de plusieurs objet powershell qui n'ont pas les mêmes noms de propriété génère des problèmes sur la sortie.
    Ok, je vais regarder de plus près.

    Citation Envoyé par ericlm128 Voir le message
    D'où ma première question, est ce que tes items XML on tous la même structure ?
    Si chaque XML peut être associé à un XSD la réponse est non, si c'est la structure du PSobject c'est probable, mais l'adaptation de PS sur le XML est particulier.
    C'est à vérifier.

    Citation Envoyé par ericlm128 Voir le message
    Pourquoi pas si besoin, mais je pense que la différence sera imperceptible (mesurable ?)
    On supprime ceci:
    #avec https://github.com/IISResetMe/PSProfiler
    Count Line Time Taken Statement
    ----- ---- ---------- ---------
    67 9 00:00.0022141 $Nodes = @($itemNode.ChildNodes | Where-Object {$_.Name -ne 'ExtendedFields'}) + @($ItemNode.ExtendedFields.ChildNodes)
    Mais les profilers utilisés ne donnent pas les mêmes résultats ou en tout cas demandent une interprétation différente de leurs résultats respectif.
    On doit donc se baser sur le temps d'exécution avec le fichier ciblé.
    Avec le profiler de nohwnd on gagne du temps sur certaines opérations mais sur d'autres on en perd. Entre deux scripts, la différence est minime mais j'ai un doute sur ce résultat, je vais prendre le temps d'étudier ce cas.
    En tout cas les deux profilers cités ici montre le gain en supprimant une itération et en utilisant une hashtable en lieu et place du cmdlet Add-member.

    Citation Envoyé par ericlm128 Voir le message
    Par contre je ne comprend pas le double foreach-object
    C'est à étudier, je n'ai pas trop compris ni pris le temps d'aller plus loin, j'ai juste trouver un moyen simple pour construire l'objet.
    Citation Envoyé par ericlm128 Voir le message
    Je n'ai pas encore pu tester sur un fichier représentatif.
    Oui sans les données de prod on ne peut que supposer.

    Quand à ton dernier message (une fausse manip ?) dubitatif je suis.

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Salut Laurent,

    J'ai répondu sur téléphone et à vrai dire je n'avais pas remarqué que l'interlocuteur avait changé
    Je pensais que la première chose a faire en tant que demandeur était de tester le bout de code proposé (sachant qu'il mets 45 mn) avant d'optimiser les micros secondes.
    Je comprend mieux les remarques et propositions sachant cela

    Donc :
    hashtable vide -> Ok, je ne m'étais jamais posé la question réellement
    simple quote -> Ok, je ne m'étais jamais posé la question réellement
    Hashtable vs add-member -> Bonne technique si le cout de la conversion n'est pas contre productif. Mais il ne semble pas préservé l'ordre des "colonnes"
    double foreach-object -> Vu que tu proposes des optimisations de l'ordre de la micro (nano ?) seconde et serais bon de comprendre. Si c'est possible d'éviter des boucles imbriqués inutiles c'est mieux
    Suppression du node Extended -> C'est a voir avec le fichier. Je ne voulais pas "déformer/modifier" la structure de l'input pour ma part. Mais peut être que c'est mieux

    Voici donc le code corrigé (si pas de coquille) :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function UnifyProperties {
        $InputCollected = @($Input)
        $Properties = $InputCollected | ForEach-Object {$_.PSObject.Properties.Name}
        $PropertiesDistinct = [string[]]([Linq.Enumerable]::Distinct([string[]]@($Properties), [System.StringComparer]::OrdinalIgnoreCase))
        $InputCollected | Select-Object @($PropertiesDistinct)
    }
     
    $content = Get-Content -LiteralPath "${PSScriptRoot}\test.xml" -Raw -Encoding UTF8
    $xmlfull = [xml]$content
     
    $Result = foreach($itemNode in $xmlfull.SelectNodes('//item'))
    {
        $ResultItem = [PsCustomObject]::new()
        $Nodes = @($itemNode.ChildNodes | Where-Object {$_.Name -ne 'ExtendedFields'}) + @($itemNode.ExtendedFields.ChildNodes) # Différence de perf via xpath ? : $itemNode.SelectNodes("ExtendedFields/field[@name]")
        $Nodes | ForEach-Object {
            Add-Member -InputObject $ResultItem -MemberType NoteProperty -Name $_.Name -Value $_.'#text'
        }
        $ResultItem
    }
     
    $Result | UnifyProperties | Export-Csv -Path "${PSScriptRoot}\testCSVUYDU.csv" -NoTypeInformation -Encoding UTF8 -Force


    UnifyProperties
    A voir pour UnifyProperties : https://github.com/PowerShell/PowerShell/issues/13906
    Exemple simple du problème :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $a1 = [PsCustomObject] @{
        aa = "a1aa"
        bb = "a1bb"
        }
     
    $a2 = [PsCustomObject] @{
        aa = "a2aa"
        cc = "a2cc"
    }
    $a3 = @($a1) + @($a2)
     
    $a3 | Select-Object *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    aa   bb  
    --   --  
    a1aa a1bb
    a2aa
    Dans un second temps se pose un problème avec la casse sur les noms de propriétés, j'utilisait cette cmdlet avant de tomber sur le problème : https://www.powershellgallery.com/pa...ion-Object.ps1
    Si tu as une méthode plus simple pour résoudre ce problème de fusions d’objet divergent sur leurs noms de propriétés ?


    Question subsidiaire
    Pendant que tu es la je voulais te poser une question, connais tu un type collection/list similaire à HashSet (clé unique), pouvant être insensible à la casse
    [System.Collections.Generic.HashSet[string]]::new([StringComparer]::OrdinalIgnoreCase)Mais qui préserve l’ordre des items
    Cette proposition est pas mal mais l'ordre n'est pas préservé : https://github.com/PowerShell/PowerS...ment-905696581
    D’où mon code de substitution :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        $Properties = $InputCollected | ForEach-Object {$_.PSObject.Properties.Name}
        $PropertiesDistinct = [string[]]([Linq.Enumerable]::Distinct([string[]]@($Properties), [System.StringComparer]::OrdinalIgnoreCase)


    Est ce que l’appelle a une fonction via le pipeline (cmdletbinding) peux modifier l'ordre de traitement/d'arrivé des objets transmis ? Je pense que non mais sans certitude.

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut Eric
    Citation Envoyé par ericlm128 Voir le message
    Je pensais que la première chose a faire en tant que demandeur était de tester le bout de code proposé (sachant qu'il mets 45 mn) avant d'optimiser les micros secondes.
    On est d'accord. S'il avait été question d'une seule itération je ne répondais pas, ta solution répond au besoin, comme le fichier à une taille importante je me suis dit que c'était à tester.
    Et comme on le sait le mieux est l'ennemi du bien.

    Citation Envoyé par ericlm128 Voir le message
    double foreach-object -> Vu que tu proposes des optimisations de l'ordre de la micro (nano ?) seconde et serais bon de comprendre.
    Oui :-)
    Je comprend mieux l'usage de UnifyProporties, à noter que les objets créées puis insérés dans le tableau ne changent pas, pour moi c'est un pb de formatage.J'approfondirai le sujet plus tard.

    Citation Envoyé par ericlm128 Voir le message
    Si tu as une méthode plus simple pour résoudre ce problème de fusions d’objet divergent sur leurs noms de propriétés ?
    Non je ne pense pas. Et à mon avis la solution serait en C#. Les PSObjets sont des objets dynamiques . Faudrait rechercher comment ce pb est géré avec la DLR.

    Pour ta Question subsidiaire ceci est-il utile ?
    Pour le hashset si je me souviens bien on peut lui ajouter un IEqualityComparer mais en C#.
    Pour ce genre de besoin je recherche du code C#. Si je trouve du temps cette semaine je regarderais ce pb.


    Citation Envoyé par ericlm128 Voir le message
    Est ce que l’appelle a une fonction via le pipeline (cmdletbinding) peux modifier l'ordre de traitement
    Non. Ensuite c'est le code de l'énumération de la collection qui peut peut-être changer l'ordre. voir ceci.

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Pour ta Question subsidiaire ceci est-il utile ?
    $h=[ordered]@{}
    Je pourrais gérer l'ajout seulement si la clé n'existe pas.
    Ce qui me dérange est que j'ai besoin d'une liste de clé (comme un hashset) et pas une paire Clé/Valeur. Vis à vis de cela le type ne me semble pas approprié a mon usage.


    Pour le hashset si je me souviens bien on peut lui ajouter un IEqualityComparer mais en C#.
    Pour ce genre de besoin je recherche du code C#. Si je trouve du temps cette semaine je regarderais ce pb.
    Je ne pensais qu'il qu'il fallait en arrivé la pour un besoin qui semble "simple"


    Merci pour l'échange et les réflexions
    A+

  14. #14
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    ça ne serait pas plus simple de faire un truc dans le genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (Select-Xml -Path ".\XML Dev.com\test.xml" -XPath "//item/* | //item/ExtendedFields/*") | ForEach-Object {
        $_.Node | select Name, Innertext 
    } 
    

  15. #15
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je ne pense pas que ta solution fonctionne, as tu testé ?

  16. #16
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Je ne pense pas que ta solution fonctionne, as tu testé ?
    Oui, dans la console le résultat semble OK

  17. #17
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je pense que tu perd la relation entre les items et les ExtendedFields, non ?

  18. #18
    Membre éprouvé
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 449
    Points : 991
    Points
    991
    Par défaut
    Question con mais je ne suis qu'un amateur..

    D'abord peut être plus se diriger vers une mini application, c# est simple d'accès mais de mémoire python 3 gère au moins l'asynchrone ...

    Charger le fichier xml , découper sur des fichiers temporaires, lancer en parallèle plusieurs traitements vers des fichiers temporaires, fusionner ces fichiers en fin. Est ce que ça serait rentable ou plus consommateur ? Avec reprise de fait en cas de problème sur les parties échouées.


    Juste de penser si c'est ordonné, à numéroter pour réécrire dans l'ordre, à la fusion.

  19. #19
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Passer par des fichiers intermédiaire ruinent la performance.
    Je comprend l'idée de multithreader le traitement en mémoire.
    Avant de se lancer dans ce type d'opération il faut établir les goulots d'étranglements afin de savoir si cela peut être rentable.

Discussions similaires

  1. Utilisation JProgressBar & temps de traitement incconu
    Par greg1602 dans le forum Composants
    Réponses: 22
    Dernier message: 30/11/2005, 20h52
  2. [Tableaux] Temps de traitement ... affichage de page
    Par mathieu77186 dans le forum Langage
    Réponses: 37
    Dernier message: 25/10/2005, 17h45
  3. [MySql] temps de traitement interminable
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/07/2005, 15h14
  4. [Perf]Utilisation des Logger et temps de traitement ?
    Par elitost dans le forum Logging
    Réponses: 6
    Dernier message: 12/04/2005, 23h13
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo