BOfH_666 577 Geschrieben 28. September 2021 Melden Teilen Geschrieben 28. September 2021 Du machst es Dir und anderen gern schwerer als nötig, oder? Wenn es sich um so ein kurzes Skript handelt, poste am Besten das ganze Skript - nicht nur einen Teil. Und es wäre nett, wenn Du nicht ganz so viel White-Space postest - das macht den Code schwerer lesbar. Wenn Du innerhalb der Schleife einen Node identifiziert hast, der aufgeteilt werden soll - Du also bereits an der Stelle bist, die Du nach dem Aufsplitten entfernen möchtest - solltest Du genau diesen Node auswählen - nicht pauschal alle Nodes!! Also nicht .SelectNodes() auf alle Nodes FVALUE sondern nur den einen, den Du grad bearbeitest!! Input: <?xml version="1.0" encoding="UTF-8"?> <BMECAT> <T_NEW_CATALOG> <PRODUCT mode="new"> <PRODUCT_FEATURES> <FEATURE> <FNAME></FNAME> <FVALUE>XYZ; 52; green </FVALUE> <FORDER></FORDER> </FEATURE> <FEATURE> <FNAME></FNAME> <FVALUE>XYZ; 53; blue </FVALUE> <FORDER></FORDER> </FEATURE> <FEATURE> <FNAME></FNAME> <FVALUE>Bla keks ohne semikolon</FVALUE> <FORDER></FORDER> </FEATURE> </PRODUCT_FEATURES> </PRODUCT> </T_NEW_CATALOG> </BMECAT> Code: $XmlData = [xml](Get-Content -Path 'C:\Users\MeinName\Desktop\DE_nv2040.xml') foreach ($Feature in ($XmlData.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES).FEATURE ) { if ($Feature.FVALUE -match ";") { $SplittedFVALUE = ($Feature.FVALUE -split ';').trim() foreach ($Value in $SplittedFVALUE) { $child = $XmlData.CreateNode("element", "FV", "") $child.InnerText = $Value $Feature.AppendChild($child) } $ItemToRemove = $Feature.SelectSingleNode('FVALUE') $Feature.RemoveChild($ItemToRemove) } } $XmlData.Save('C:\Users\MeinName\Desktop\DE_nv2040_new.xml') Output: <?xml version="1.0" encoding="UTF-8"?> <BMECAT> <T_NEW_CATALOG> <PRODUCT mode="new"> <PRODUCT_FEATURES> <FEATURE> <FNAME> </FNAME> <FORDER> </FORDER> <FV>XYZ</FV> <FV>52</FV> <FV>green</FV> </FEATURE> <FEATURE> <FNAME> </FNAME> <FORDER> </FORDER> <FV>XYZ</FV> <FV>53</FV> <FV>blue</FV> </FEATURE> <FEATURE> <FNAME> </FNAME> <FVALUE>Bla keks ohne semikolon</FVALUE> <FORDER> </FORDER> </FEATURE> </PRODUCT_FEATURES> </PRODUCT> </T_NEW_CATALOG> </BMECAT> Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 1. Oktober 2021 Autor Melden Teilen Geschrieben 1. Oktober 2021 Wenn ich das ausführe kommt eine Fehlermeldung: [Ausnahme beim Aufrufen von "RemoveChild" mit 1 Argument(en): "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."] Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 1. Oktober 2021 Melden Teilen Geschrieben 1. Oktober 2021 vor 28 Minuten schrieb Proll012: Wenn ich das ausführe kommt eine Fehlermeldung: [Ausnahme beim Aufrufen von "RemoveChild" mit 1 Argument(en): "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."] Tja .. .was soll ich dazu sagen ... ich hab's grad nochmal getestet - sowohl mit PS v5.1 als auch mit v7.1.4. Und was soll ich sagen - es funktioniert mit den Daten, die ich gepostet habe genau so wie ich es gepostet habe. Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 1. Oktober 2021 Autor Melden Teilen Geschrieben 1. Oktober 2021 Das wollte ich auch nicht bestreiten, dachte vielleicht kennst du das Problem :/ Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 1. Oktober 2021 Melden Teilen Geschrieben 1. Oktober 2021 Hmmm ... ne ... ohne die Original-Daten habe ich das Problem einfach nicht ... sorry Jetzt kannst Du lernen, wie man ein PowerShell-Skript debugged! https://devblogs.microsoft.com/scripting/debugging-powershell-script-in-visual-studio-code-part-1/ ... oder hier ... 'n Video ... Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 1. Oktober 2021 Autor Melden Teilen Geschrieben 1. Oktober 2021 Danke dir:) Habe deine xml gerade ausgeführt und dann tuts bei mir auch, aber ich weiß nicht wo der große unterschied zu dieser ist <?xml version="1.0" encoding="UTF-8"?> -<BMECAT xml:lang="de" xmlns="http://www.bmecat.org/bmecat/2005fd" version="2005"> -<T_NEW_CATALOG> -<PRODUCT> -<PRODUCT_FEATURES> <REFERENCE_FEATURE_GROUP_NAME>Test12</REFERENCE_FEATURE_GROUP_NAME> -<FEATURE> <FNAME>Marke</FNAME> <FVALUE>Test1;Test11</FVALUE> <FORDER>10</FORDER> <FVALUE_DETAILS>HK204000010</FVALUE_DETAILS> <FVALUE xmlns=" ">Test1</FVALUE> <FVALUE xmlns=" ">Test11</FVALUE> </FEATURE> -<FEATURE> <FNAME>Hersteller</FNAME> <FVALUE>Test2;Test22;Test222</FVALUE> <FORDER>20</FORDER> <FVALUE_DETAILS>HK204000020</FVALUE_DETAILS> <FVALUE xmlns=" ">Test2</FVALUE> <FVALUE xmlns=" ">Test22</FVALUE> <FVALUE xmlns=" ">Test222</FVALUE> </FEATURE> </PRODUCT_FEATURES> </PRODUCT> </T_NEW_CATALOG> </BMECAT> Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 1. Oktober 2021 Melden Teilen Geschrieben 1. Oktober 2021 Wenn ich das als XML-Datei speichere und versuche zu importieren, bekomme ich schon eine Fehlermeldung - Du nicht? PowerShell hält das nicht für valides XML. v7.1.4 : InvalidArgument: Cannot convert value "System.Object[]" to type "System.Xml.XmlDocument". Error: "The specified node cannot be inserted as the valid child of this node, because the specified node is the wrong type." v5.1 Der Wert "System.Object[]" kann nicht in den Typ "System.Xml.XmlDocument" konvertiert werden. Fehler: "Der angegebene Knoten konnte nicht als gültiger untergeordneter Knoten eingefügt werden, da der angegebene Knoten den falschen Typ hat." In Zeile:1 Zeichen:1 + $XmlData = [xml](Get-Content -Path 'D:\sample\DE_nv2040_orig.xml') + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : InvalidCastToXmlDocument Zitieren Link zu diesem Kommentar
Beste Lösung Proll012 0 Geschrieben 1. Oktober 2021 Autor Beste Lösung Melden Teilen Geschrieben 1. Oktober 2021 (bearbeitet) Ne, das läuft super. O.o ok, so funktioniert es -<BMECAT> und wie unten nicht. -<BMECAT xml:lang="de" xmlns="http://www.bmecat.org/bmecat/2005fd" version="2005"> das Problem ist der Link. Ich versuche den jetzt direkt am Anfang zu löschen. Soweit ich Richtig verstehe, ist das ein Attribut in dem Element. bearbeitet 1. Oktober 2021 von Proll012 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.