
Proll012
Members-
Gesamte Inhalte
29 -
Registriert seit
-
Letzter Besuch
Alle erstellten Inhalte von Proll012
-
PowerShell schleife zum bearbeiten von xml Dateien in einem Verzeichnis
Proll012 hat einem Thema erstellt in: Windows Forum — Scripting
Hallo, Ich versuche mit diesem Programm in der "Root-Node" einen Attributwert zu löschen bzw. durch nichts zu ersetzen. Ich habe auch schon andere Wege ausprobiert aber die haben nicht Funktioniert. Folgendes Skript schafft es wenigstens die Datei erfolgreich zu bearbeiten, wenn nur eine Datei im Verzeichnis liegt. $quellpfad ="C:\Users\Oho\Desktop\LinkEntfernerTest" $XmlData = get-ChildItem $quellpfad "*.xml" Foreach-Object{ $XMLFile = get-content $XmlData.Fullname $NewRawXML = $XMLFile|%{ if ($_ -match '\<BMECAT\s*'){ $_ -replace '\s*xmlns\=".*"','' } else{ $_ } } $NewRawXML ([xml]$NewRawXML).save($XmlData.FullName) } Wenn zwei oder mehr Dateien vorhanden sind bekomme ich folgenden Fehler.. Der Wert "System.Object[]" kann nicht in den Typ "System.Xml.XmlDocument" konvertiert werden. Fehler: "Unerwartete XML-Deklaration. Die XML-Deklaration muss der erste Knoten im Dokument sein. Kann mir da jemand weiterhelfen? -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Nicee danke dir, $quellpfad ="C:\Users\MeinName\Desktop\Experiment,Test" $XmlData = get-ChildItem $quellpfad "*.xml" -Recurse foreach ($xmlobject in $XmlData) { [xml]$xml = get-content $xmlobject.Fullname foreach ($Feature in ($xml.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES).FEATURE ) { if ($Feature.FVALUE -match ";") { $SplittedFVALUE = ($Feature.FVALUE -split ';').trim() foreach ($Value in $SplittedFVALUE) { $child = $xml.CreateNode("element", "FVALUE", " ") $child.InnerText = $Value $Feature.AppendChild($child) } $ItemToRemove = $Feature.SelectSingleNode('FVALUE') $Feature.RemoveChild($ItemToRemove) } } $xml.Save($xmlobject.Fullname) } So funktionierts :)))))))) bis jetzt. -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Gesagt, getan. $quellpfad ="C:\Users\MeinName\Desktop\XmlFutterTest" $XmlData = get-ChildItem $quellpfad "=.xml" -Recurse foreach ($xmlobject in $XmlData) { [xml]$xml = get-content $xmlobject.Fullname foreach ($Feature in ($xmlobject.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES).FEATURE ) { if ($Feature.FVALUE -match ";") { $SplittedFVALUE = ($Feature.FVALUE -split ';').trim() foreach ($Value in $SplittedFVALUE) { $child = $xmlobject.CreateNode("element", "FVALUE", " ") $child.InnerText = $Value $Feature.AppendChild($child) } } $ItemToRemove = $Feature.SelectSingleNode('FVALUE') $Feature.RemoveChild($ItemToRemove) } $xml.Save($xmlobject.Fullname) } Holzweg? Formfehler? zumindest bekomme ich keinen Fehler angezeigt. Passieren tut aber auch nichts :/ -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Von dir aus betrachtet ja ganz sicher Von mir aus gesehen besteht Hoffnung Lese die gerade:) Auch schon was gefunden:D -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Leute was soll ich sagen Ich dachte ich bin ganz knapp vor der Lösung Und während ich vor 2 Wochen noch gar nichts verstanden habe, versteh ich jetzt doch schon deutlich mehr. :)) -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Puh keine Ahnung welche Variable ich dann angeben muss, damit der jede eingespielten Datei unter dem eingespielten Namen in ein anderes Verzeichnis speichert.:( Da bin ich mir sicher ... $files = Get-ChildItem C:\Users\sluet\Desktop\XmlFutterTest -Recurse *.xml Foreach-Object { [xml]$XmlData = Get-Content $files } 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", "FVALUE", " ") $child.InnerText = $Value $Feature.AppendChild($child) }} $ItemToRemove = $Feature.SelectSingleNode('FVALUE') $Feature.RemoveChild($ItemToRemove) } $XmlData.Save($files) Könnt ihr mir denn sagen, was ich hier falsch mache? Versuche hier das Selbe wie oben. Zu Foreach-Object {[xml]$XmlData = Get-Content $files } Gibt der mir ein Fehler aus. Das der dazu nichts findet. -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Das war nur ein Beispiel, das wäre $NewRawXML im oben genannten Skript. Und darin sollte soweit ich richtig verstehe die überarbeitete Datei drin stehen. Der Link von BMECAT muss raus dann erkennt PowerShell das als richtiges xml. Ergo wird FVALUE beim ";" gesplittet neu verknotet und der alte FVALUE wird dann auch gelöscht. Es geht mir aber gar nicht so sehr darum. Die Links manuell raus zu Löschen ist nicht so das Problem. Viel mehr das manuelle eintragen einzelner Dateien. Haben zu Soll Pfad. Aber ich versuche das nochmal, wenn ich richtig deute, habe ich wohl nur die Variable in .save($...) eingetragen. -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Ja das weiß ich mittlerweile. Ich habe auch versucht das mit Variablen zu Speichern. Aber wenn ich z.B. $XmlData.Save($FinishedXml) Eintrage passiert nichts und ich weiß nicht wie ich das sonst schreiben soll/kann. -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Achso, ok danke, dann Funktioniert mein Skript nicht so wie erhofft..:D Wenn du sagen magst/kannst, wie mache ich das denn, dass der jede gezogene Datei einzeln durch die Prüfung schickt? -
PowerShell Bearbeitung richtig Speichern
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Moin Nils, hmm, ich bin ziemlich neu in dem Thema. Kann sein das ich etwas will das so nicht funktioniert. Ich habe 3 Dateien in dem Verzeichnis. Und die sollen alle durch die Prüfung und dann wieder in einzelne Dateien zurück. C:\Users\Myname\Desktop\Auobearbeitungtest Ich bin davon ausgegangen, das mir nur der Code zum Speichern in einzelne Dateien fehlt. -
PowerShell Bearbeitung richtig Speichern
Proll012 hat einem Thema erstellt in: Windows Forum — Scripting
Guten Tag, Ich bin dabei xml Daten aus einem Verzeichnis einzulesen und diese zu bearbeiten. Jedoch weiß ich nicht und finde nichts wie ich diese einzeln wieder Speicher. $files = Get-ChildItem C:\Users\Myname\Desktop\Auobearbeitungtest -Recurse *.xml | Foreach-Object { [xml] $content = Get-Content $_.FullName } $NewRawXML=$content|%{ if ($_ -match '\<BMECAT\s*'){ $_ -replace '\s*xmlns\=".*"','' } else{ $_ }} Wenn ich die Dateien einzeln einspiele und einzeln wieder ausspiele geht natürlich alles wunderbar. Aber wie mache ich das hier? In der Originaldatei oder unter dem Original Namen in einem neuen Verzeichnis wäre supi. Danke und liebe Grüße -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
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. -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
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> -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Das wollte ich auch nicht bestreiten, dachte vielleicht kennst du das Problem :/ -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
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."] -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Sooo, Das war mein eigentliches Ziel . Ne Spaß, schätze ich muss neben PowerShell auch noch lernen wie man von Anfang an seine Frage komplett & richtig stellt. Habe ich hinbekommen. ^^ Dann ist ja gut, kann das einspielen leider nicht selber ausprobieren :/ Hierzu, habe ich viel ausprobiert uuund komme nicht weiter....:/ $XmlData = [xml](Get-Content -Path 'C:\Users\MeinName\Desktop\DE_nv2040_new.xml') foreach ($Feature in ($XmlData.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES).FEATURE ) { $condition = $Feature.FVALUE -match ";" $nodes = $XmlData.SelectNodes("FVALUE['$condition']") foreach($node in $nodes){$node.ParentNode.RemoveChild($node)} } } $XmlData.Save('C:\Users\MeinName\Desktop\DE_nv2040_new.xml') Als Beispiel nehme ich einfach mal das. Bin aber noch mehr Möglichkeiten durchgegangen, aber nichts tut. meistens bekomme ich die Rückmeldung das der den NULL hat. Heute Morgen, hats zumindest was anderes gelöscht, aber ich weiß nicht mehr wie ich das zusammen gefriemelt hab. -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Hallo BOfH_666, ich weiß gar nicht wie ich mich bei dir bedanken soll<3 <FEATURE> <FNAME>Länge</FNAME> <FVALUE>900</FVALUE> <FORDER>120</FORDER> <FVALUE_DETAILS>84241265426</FVALUE_DETAILS> <FV xmlns="">900</FV> </FEATURE> <FEATURE> <FNAME>Farbe</FNAME> <FVALUE>anthrazit;edelstahl</FVALUE> <FORDER>200</FORDER> <FVALUE_DETAILS>45445256525</FVALUE_DETAILS> <FV xmlns="">anthrazit</FV> <FV xmlns="">edelstahl</FV> </FEATURE> das ist das Ergebnis. Ich denke <FV xmlns=""> wird hierdurch erzeugt [$child = $XmlData.CreateNode("element", "FV", "")] also müsste ich nur FV durch FVALUE ersetzen und die letzten "" Wegnehmen, dann wäre es richtig angezeigt. Nur wie lösche ich dann das Alte wo noch Semikolons drin sind? Das Skript erstellt mir jetzt auch einen <FV xmlns=""> Eintrag für welche ohne ";" :/ Und geht das, dass der neue Eintrag dann da steht wo der Alte war/ist? Alles in allem bin ich dir aber so ohnehin schon <Unendlich>%</Unendlich> dankbar und wenn du an dieser Stelle genug hast. Ist das kein Problem für mich. <3 -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
puh, ok. schätze der Pfad hinter "$XmlData" ist der gefragte Pfad? Wie müsste ich das denn eintragen/abfragen. Bzw. kann ich mit PowerShell die Struktur erfragen und dann da eintragen lassen? -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Hmm, ich habe jetzt angenommen das die nicht so wichtig sind, weil der Pfad nach FVALUE, ja so richtig ist. -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Ne, die Annahme ist ziemlich zutreffend. Der Pfad zu FVALUE ist so richtig. einzige ist: bei <Produkt> steht noch <Produkt mode="new"> So sieht das aus, ich hab den Inhalt mal lieber schwarz gemacht. -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat. In Zeile:6 Zeichen:5 + $XmlData.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES.FEATURE.Ap ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Hi, also erstmal danke ich dir vielmals. Ich werde E-Commerce Kaufmann. Also an sich habe ich gar nicht so viel mir Programmieren zu tun:) Ich bekomme diese Fehlermeldung, wenn ich das Skript ausführe. -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Also erstmal danke das Ihr so viel Nachsicht mit mir habt ^^ $XmlData = [xml](Get-Content C:\Users\MeinName\Desktop\DE_nv2040.xml) #$xmlData.GetType() $XmlData.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES.FEATURE.FVALUE ForEach-Object (FVALUE in $XmlData) { if (FVALUE -like '*;*') } Soooo, also ich bin soweit gekommen das ich mir FVALUE Inhalte ausgeben kann. Jetzt fehlt ja noch das ForEach Object/FVALUE mit Semikolon im Inhalt -->Semikolon Löschen, und Inhalte auf neue Nodes aufteilen. Soweit ich das jetzt richtig begriffen habe. Da häng ich gerade n bisschen fest. -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
-
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
Das ist der einzige Code den ich habe O.o @echo off chcp 65001 >nul set "XMLFile=DE_nv2045" set "outFile=new.%XMLFile%" (call ) >"%outFile%" for "tokens=1* delims=]" %%a in ('type "%XMLFile%"^|find /v /n ""') do ( echo %%b|find /i "<FVALUE>" && ( for /f "tokens=1* delims=;" %%f in ("%%b") do ( >>"%outFile%" echo %%f^</FVALUE^> >>"%outFile%" echo ^<FVALUE^>%%g ) ) || ( >>"%outFile%" echo:%%b ) ) echo type "%outFile%" pause -
Xml datei mit Batch bearbeiten
Proll012 antwortete auf ein Thema von Proll012 in: Windows Forum — Scripting
ursprünglich Batch, kann aber seit gerade auch Powershell nutzen. Wenn mir da jemand helfen kann das anzupassen wäre das extrem nett.