Jump to content
epsodus

XML Datei bearbeiten

Recommended Posts

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

 

Share this post


Link to post

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/

 

 

Edited by BOfH_666

Share this post


Link to post

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.

Share this post


Link to post
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

 

Edited by BOfH_666

Share this post


Link to post

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

Share this post


Link to post
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?

Share this post


Link to post

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,

Share this post


Link to post

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. ;-) 

Share this post


Link to post

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

Share this post


Link to post
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 ;-) )

Share this post


Link to post

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. 

 

Share this post


Link to post

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?

Edited by BOfH_666

Share this post


Link to post
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.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...