epsodus 3 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 Hallo zusammen, ich hoffe mir kann jemand einen Denkanstoß geben oder auch helfen, Scripting PowerShell. Ich habe eine XML Datei, dort sind mehrere Knoten vorhanden, Auszug aus der Datei: Ich meine mit Knoten: -<Stat> bis </Stat> -<SctiesFincgRptgTxStatRpt> -<TradData> -<Stat> <TechRcrdId>ERTHUTDREPxxSCDxxSFTRxxSFTxx487331</TechRcrdId> +<CtrPtyData> +<LnData> +<CollData> +<CtrctMod> </Stat> -<Stat> <TechRcrdId>WKTHUTDREPxxSCDxxSFTRxxSFTxx487335</TechRcrdId> +<CtrPtyData> +<LnData> +<CollData> +<CtrctMod> </Stat> -<Stat> <TechRcrdId>KRTHUTDEKDxxSCDxxSFTRxxSFTxx487339</TechRcrdId> +<CtrPtyData> +<LnData> +<CollData> +<CtrctMod> </Stat> Ich möchte die XML Datei nach allen Knoten durchsuchen, wenn einer gefunden wurde, soll dieser in einer neuen XML Datei abgespeichert werden. So das ich für jeden Knoten eine separate Datei bekomme. Zum durchsuchen der Datei, dachte ich an eine Schleife, aber meine XML Kenntnisse zum Aufbau sind wohl nicht gut genug. Bekomme noch keine Ergebnisse. Kann mir jemand bei dem oben geschrieben helfen ? $StatXmlData = [xml](Get-Content "D:\test.xml") $node = $StatXmlData.Backups.Stat $Statnames = @() foreach ($entry in $node) { $Statnames = $Statnames + $entry.TechRcrdId } Write-host $Statnames Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 (bearbeitet) Ich bin weit davon entfernt XML wirklich zu verstehen. Und ich bin noch viel weiter davon entfernt, ein Fan von XML zu sein. Wenn irgendwie möglich mache ich einen riesengroßen Bogen um XML. So ... da das XML-Schnipselchen, welches Du gepostet hast, kein valides XML ist und man es so nicht verwenden kann, hab ich es mal auf etwas Benutzbares eingekürzt. <?xml version="1.0"?> <SctiesFincgRptgTxStatRpt> <TradData> <Stat> <TechRcrdId>ERTHUTDREPxxSCDxxSFTRxxSFTxx487331</TechRcrdId> </Stat> <Stat> <TechRcrdId>WKTHUTDREPxxSCDxxSFTRxxSFTxx487335</TechRcrdId> </Stat> <Stat> <TechRcrdId>KRTHUTDEKDxxSCDxxSFTRxxSFTxx487339</TechRcrdId> </Stat> </TradData> </SctiesFincgRptgTxStatRpt> Angenommen, wir haben das in der Datei D:\sample\test.xml gespeichert, können wir mit folgendem Code die einzelnen TechRcrdId's auslesen. $StatXmlData = [xml](Get-Content D:\sample\test.xml) $node = $StatXmlData.SctiesFincgRptgTxStatRpt.TradData.ChildNodes foreach ($entry in $node){ $entry } Was möchtest Du denn mit den extrahierten Daten anstellen? Hier noch ein bissl Lektüre zum Thema XML mit Powershell: https://www.petri.com/creating-custom-xml-net-powershell oder hier: https://searchwindowsserver.techtarget.com/tip/Using-PowerShell-to-create-XML-documents oder hier noch was vom Dr. Tobias: https://www.powershellmagazine.com/2013/08/19/mastering-everyday-xml-tasks-in-powershell/ bearbeitet 8. März 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 8. März 2020 Autor Melden Teilen Geschrieben 8. März 2020 Hallo, Danke für den Hinweis, ich hätte es jetzt so gemacht. Deine Lösung ist eleganter. $StatTradDataXmlData = [xml](Get-Content "D:\sample\test.xml") $node = $StatTradDataXmlData.SctiesFincgRptgTxStatRpt.TradeData $Statnames = @() foreach ($entry in $node) { $Statnames = $Statnames + $entry.Stat } Write-host $Statnames Ich möchte für jeden extrahierten Knoten ein neues XML File erstellen, wo nur der gefunden Knoten enthallten ist Als Beispiel: <?xml version="1.0"?> <SctiesFincgRptgTxStatRpt> <TradData> <Stat> <TechRcrdId>ERTHUTDREPxxSCDxxSFTRxxSFTxx487331</TechRcrdId> </Stat> </TradData> </SctiesFincgRptgTxStatRpt> Ja, XML ist für mich schwer, habe mich in der Zwischenzeit über den XML Aufbau etwas eingelesenen. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 (bearbeitet) vor 4 Minuten schrieb epsodus: Ich möchte für jeden extrahierten Knoten ein neues XML File erstellen, wo nur der gefunden Knoten enthallten ist Hmmm ... das hatte ich verstanden, aber wozu? Was willst Du mit den neu erzeugten Dateien anstellen? Genau genommen brauchst Du die Schleife bei Powershell nicht mal. Wenn Du die ID's nur ausgeben willst, reicht auch das hier: $StatXmlData.SctiesFincgRptgTxStatRpt.TradData.ChildNodes bearbeitet 8. März 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 8. März 2020 Autor Melden Teilen Geschrieben 8. März 2020 Hi, wie soll ich das erklären, ich versuche es mal. Es wird ein XML File zur Validierung verschickt ( exportiert ), für jeden User ein File, es können 100 user sein. Als Antwort kommt eine Responesdatei ( Importdatei ) zurück. Jetzt kommt der Knackpunkt, in diesem File sind keine Userkennungen mehr drin. Sondern für jeden User gibt es eine Nummer die jedem User fest vergeben ist ( z.B. ERTHUTDREPxxSCDxxSFTRxxSFTxx487331 ). Daher muss ich das Importfile splitten, nach diesen Nummern und neu erstellen. Also beim schreiben des neuen Files, wird der Dateiname um diese besagte Nummer erweitert. Anhand der Nummer kann ich einen Abgleich mit einem Excelsheet vornehmen, so das jeder User sein eigenes Responsesfile bekommt. ich habe hier mal den Begriff User genommen, zur Erklärung Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 vor 32 Minuten schrieb epsodus: so das jeder User sein eigenes Responsesfile bekommt. hmmm ... ok, und was macht der User dann damit? Nimmer er einen Editor und schaut rein? Wer erstellt die XML-Files zur Validierung? Warum kommt nur eine Response-Datei zurück und nicht für jeden User eine? Woher kommen die Nummern für jeden User? ... vielleicht aus dem AD? Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 8. März 2020 Autor Melden Teilen Geschrieben 8. März 2020 Hi, Der User kann damit seine Exportdatei mit der validierten Importdatei abgleichen. Die XML Files werden durch ein Programm erzeugt und versendet. Es kommt nur ein File zurück mit allen Antworten, darauf hat man keinen Einfluss Die Nummer für jeden User ist im Vorfeld festgelegt, Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 Bitte nicht falsch verstehen ... ich bin nicht unwillig, oder so zweifle Deinen angestrebten Workflow an. Ich finde die Arbeit mit XML und Powershell nur alles andere als intuitiv und einfach und versuche deshalb, für mich so weit wie möglich zu vermeiden, wirklich mit XML arbeiten zu müssen ... also sorry dafür. vor 31 Minuten schrieb epsodus: Der User kann damit seine Exportdatei mit der validierten Importdatei abgleichen. Tut er das manuell? Also öffnet der User die Datei und schaut für den Abgleich hinein? Wenn das so ist, muss es ja nicht zwingend eine valide XML-Datei sein, oder? Es würde eine Text-Datei genügen, die die nötigen Informationen enthält. vor 31 Minuten schrieb epsodus: Es kommt nur ein File zurück mit allen Antworten, darauf hat man keinen Einfluss Was würde passieren, wenn man nur eine Datei zum validieren versenden würde? Vielleicht kann man das Aufsplitten in einzelne User-Dateien ja vermeiden, wenn man dem Validator nur einzelne User-Dateien verfüttert!? vor 38 Minuten schrieb epsodus: Die Nummer für jeden User ist im Vorfeld festgelegt, Und diese Zuordnung von User zu Nummer liegt nur in einer XLS-Datei vor? Eine CSV-Datei wäre für Powershell ein wenig einfacher zu verarbeiten. Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 8. März 2020 Autor Melden Teilen Geschrieben 8. März 2020 es ist eine csv Datei. Leider wird für jeden Benutzer diese Datei zum Export erzeugt Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 ... und meine erste Frage? Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 8. März 2020 Autor Melden Teilen Geschrieben 8. März 2020 Hallo, Du meinst dazu ? Was würde passieren, wenn man nur eine Datei zum validieren versenden würde? Vielleicht kann man das Aufsplitten in einzelne User-Dateien ja vermeiden, wenn man dem Validator nur einzelne User-Dateien verfüttert!? Die Dateien werden getrennt auf verschiedenen Rechnern erstellt und versendet. Gesammelt wird auf der Gegenseite, dann nur ein XML File erstellt. Hier mal eine Beispiel Exceldatei, man darf hier wohl keine csv Datei ablegen , also xlsx Zuordnung.xlsx Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 vor 3 Minuten schrieb epsodus: Was würde passieren, wenn man nur eine Datei zum validieren versenden würde? Neeee ... ob der Abgleich bei den Usern manuell erfolgt. Wenn die Anwender die XML-Datei einfach öffnen und mit ihren eigenen Äuglein reinschauen, um den Abgleich durchzuführen, dann wäre es meiner Meinung nach fast besser, wenn es keine XML-Dateien wären. XML-Dateien sind nicht für Menschen gemacht. (höchstens für Sadisten und Masochisten ) Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 8. März 2020 Autor Melden Teilen Geschrieben 8. März 2020 Hi, das File wird dann automatisch verarbeitet Solange es xml Fomat hat Genau, (höchstens für Sadisten und Masochisten ) Das XML Format ist ja mein Problem Mein Problem ist es mit XLM umzugehen. Wenn man jetzt den Knoten identifiziert hat, wie erstelle ich dann für jeden Knoten ein XLM File, mit dem Knoten als Inhalt, wie oben beschrieben und setze die Nummer vorne als Namensbestandteil dran. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 (bearbeitet) OK, dann versuche ich mal, das Ganze in Prosa zusammenzufassen: Ihr habt eine Software, die für jeden Nutzer einzeln eine Datei irgendwohin verschickt, die für einen Validierungsprozess benötigt wird. Als Antwort für die einzeln verschickten Dateien, erhaltet ihr eine zusammengefasste Antwort-Datei, die die gesammelten "Antwort-Datensätze" für die einzelnen Anwender enthält. Diese zusammengefasste Antwort-Datei muss jetzt in einem manuellen, externen, aufwändigen Prozess so aufbereitet werden, dass sie von den einzelnen Anwendern wieder als Abgleich verwendet werden und vom Programm eingelesen werden kann. Ist das erforderliche Format irgendwie dokumentiert? Hab ich das soweit richtig verstanden? Habt Ihr für die Software Geld bezahlt? Falls ja, würde ich entweder auf Minderung des Preises oder auf Nachbesserung bestehen. ... mal ernsthaft, wenn das so ist, kann das nicht im Sinne des Erfinders sein. Achso ... wenn CSV-Dateien nicht gehen, änderst Du einfach die Endung auf txt und hängst die Datei so an. Mal so aus Neugier an einen Mod (falls einer mitliest): warum sind CSV-Dateien nicht erlaubt? bearbeitet 8. März 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
Lian 2.421 Geschrieben 8. März 2020 Melden Teilen Geschrieben 8. März 2020 vor 9 Minuten schrieb BOfH_666: Mal so aus Neugier an einen Mod (falls einer mitliest): warum sind CSV-Dateien nicht erlaubt? Wir verwenden ein whitelisting von wenigen bekannten Dateitypen, mehr steckt nicht dahinter CSVs bitte wie vorgeschlagen als Texdatei anhängen. 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.