Jump to content

Proll012

Members
  • Gesamte Inhalte

    29
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von Proll012

  1. 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?
  2. 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.
  3. 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 :/
  4. Von dir aus betrachtet ja ganz sicher Von mir aus gesehen besteht Hoffnung Lese die gerade:) Auch schon was gefunden:D
  5. 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. :))
  6. 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.
  7. 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.
  8. 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.
  9. 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?
  10. 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.
  11. 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
  12. 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.
  13. 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>
  14. Das wollte ich auch nicht bestreiten, dachte vielleicht kennst du das Problem :/
  15. 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."]
  16. 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.
  17. 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
  18. 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?
  19. Hmm, ich habe jetzt angenommen das die nicht so wichtig sind, weil der Pfad nach FVALUE, ja so richtig ist.
  20. 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.
  21. 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.
  22. 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.
  23. 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
  24. ursprünglich Batch, kann aber seit gerade auch Powershell nutzen. Wenn mir da jemand helfen kann das anzupassen wäre das extrem nett.
×
×
  • Neu erstellen...