Bestimmte Teile von XML Dateien kopieren
Hallo,
ich habe folgende Dateien über 10k:
Nun muss ich von allen Dateien eine Kopie erstellen in der die Projecte aber nicht vollständig übernommen werden sollen.
In meinem Fall sollen nur die Projekte mit kopiert werden die von ersteller id=2 mit dem name=Diana erstellt worden sind.
Sozusagen soll die Datei im separaten Ordner dann wie folgt aussehen:
So jede XML Datei finden ist ja kein Problem aber wenn es jetzt an das kopieren geht von den XML Daten habe ich keine Ahnung wie ich diese dann kopieren kann.
Meine Intention bei dem oberen Script wahr, ich erhalte erstmal wieviel project gesamt gefunden werden. Problem er gibt mir nur die KundenAnzahl aus in der mindestens einmal die richtige Kombigefunden wird und dann alle Einträge auch die nicht gewünschten.
Danke im voraus für eure Antworten.
Beste Grüße Markus
ich habe folgende Dateien über 10k:
<?xml version="1.0" encoding="utf-8"?>
<Data>
<Ortsangaben id="1">
<Ort id="0001" name="Musterstadt" plz="12345">
</Ortsangaben>
<Ortsangaben id="2">
<Ort id="0002" name="Musterhausen" plz="45678">
</Ortsangaben>
<Ortsangaben id="3">
<Ort id="0003" name="Spatzenhausen" plz="95123">
</Ortsangaben>
<Kundenzusatz id="1">
<Zusatz id="0001" betreff="linke Tür">
<Zusatzwichtig id="0001" betreff="Kunde wünsch DU Form">
</Kundenzusatz>
<Kundenzusatz id="2">
<Zusatz id="0002" betreff="linke Tür">
</Kundenzusatz>
<projects>
<project id="0001" name="Book1" date="2009-01-08">
<ersteller id="1" name="Kurt"/>
<editions>
<edition language="English">En.Book1</edition>
<edition language="German">Ge.Book1</edition>
<edition language="French">Fr.Book1</edition>
<edition language="Polish">Pl.Book1</edition>
</editions>
</project>
<project id="0002" name="Book2" date="2010-03-23">
<ersteller id="1" name="Kurt"/>
<editions>
<edition language="English">En.Book2</edition>
<edition language="German">Ge.Book2</edition>
<edition language="French">Fr.Book2</edition>
<edition language="Polish">Pl.Book2</edition>
</editions>
</project>
<project id="0003" name="Book3" date="2012-06-16">
<ersteller id="2" name="Diana"/>
<editions>
<edition language="English">En.Book3</edition>
<edition language="German">Ge.Book3</edition>
<edition language="French">Fr.Book3</edition>
<edition language="Polish">Pl.Book3</edition>
</editions>
</project>
<project id="0004" name="Movie1" date="2012-12-01">
<ersteller id="1" name="Kurt"/>
<editions>
<edition language="English">En.Movie1</edition>
<edition language="German">Ge.Movie1</edition>
<edition language="French">Fr.Movie1</edition>
<edition language="Polish">Pl.Movie1</edition>
</editions>
</project>
<project id="0005" name="Movie2" date="2013-01-15">
<ersteller id="2" name="Diana"/>
<editions>
<edition language="English">En.Movie2</edition>
<edition language="German">Ge.Movie2</edition>
<edition language="French">Fr.Movie2</edition>
<edition language="Polish">Pl.Movie2</edition>
</editions>
</project>
</projects>
</Data>
Nun muss ich von allen Dateien eine Kopie erstellen in der die Projecte aber nicht vollständig übernommen werden sollen.
In meinem Fall sollen nur die Projekte mit kopiert werden die von ersteller id=2 mit dem name=Diana erstellt worden sind.
Sozusagen soll die Datei im separaten Ordner dann wie folgt aussehen:
<?xml version="1.0" encoding="utf-8"?>
<Data>
<Ortsangaben id="1">
<Ort id="0001" name="Musterstadt" plz="12345">
</Ortsangaben>
<Ortsangaben id="2">
<Ort id="0002" name="Musterhausen" plz="45678">
</Ortsangaben>
<Ortsangaben id="3">
<Ort id="0003" name="Spatzenhausen" plz="95123">
</Ortsangaben>
<Kundenzusatz id="1">
<Zusatz id="0001" betreff="linke Tür">
<Zusatzwichtig id="0001" betreff="Kunde wünsch DU Form">
</Kundenzusatz>
<Kundenzusatz id="2">
<Zusatz id="0002" betreff="linke Tür">
</Kundenzusatz>
<projects>
<project id="0003" name="Book3" date="2012-06-16">
<ersteller id="2" name="Diana"/>
<editions>
<edition language="English">En.Book3</edition>
<edition language="German">Ge.Book3</edition>
<edition language="French">Fr.Book3</edition>
<edition language="Polish">Pl.Book3</edition>
</editions>
</project>
<project id="0005" name="Movie2" date="2013-01-15">
<ersteller id="2" name="Diana"/>
<editions>
<edition language="English">En.Movie2</edition>
<edition language="German">Ge.Movie2</edition>
<edition language="French">Fr.Movie2</edition>
<edition language="Polish">Pl.Movie2</edition>
</editions>
</project>
</projects>
</Data>
So jede XML Datei finden ist ja kein Problem aber wenn es jetzt an das kopieren geht von den XML Daten habe ich keine Ahnung wie ich diese dann kopieren kann.
##foreach Schleife für Datei Auslesen{
[xml]$KD=Get-Content $dateipfad
if($KD.Data.projects.project.ersteller.id -eq $suchbegriff_id -and $KD.Data.projects.project.ersteller.id -eq $suchbegriff_name){
echo $KD.Data.projects.project
echo $KD.Data.projects.project.ersteller.id
echo $KD.Data.projects.project.ersteller.name
$numbers++
echo "Aktuelle Zeile:" $numbers
}
##}
Meine Intention bei dem oberen Script wahr, ich erhalte erstmal wieviel project gesamt gefunden werden. Problem er gibt mir nur die KundenAnzahl aus in der mindestens einmal die richtige Kombigefunden wird und dann alle Einträge auch die nicht gewünschten.
Danke im voraus für eure Antworten.
Beste Grüße Markus
Please also mark the comments that contributed to the solution of the article
Content-Key: 53231100801
Url: https://administrator.de/contentid/53231100801
Printed on: June 16, 2024 at 00:06 o'clock
6 Comments
Latest comment
![Mitglied: 10138557388 Mitglied: 10138557388](/images/members/profile_male_64x64.png)
# quellordner
$quelle = "D:\Daten"
# zielordner
$ziel = "D:\Ziel"
foreach($file in Get-ChildItem $quelle -File -Filter *.xml){
# xml object
$xml = New-Object XML
# xml laden
$xml.Load($file.Fullname)
# unerwünschte Knoten löschen
$xml.data.projects.project | ?{!($_.ersteller.id -eq 2 -and $_.ersteller.name -eq 'Diana')} | %{$_.parentNode.removeChild($_)}
# alternative Variante mit Zuweisung statt Entfernung der Knoten
# $xml.data.projects.InnerXml = $xml.data.projects.project | ?{$_.ersteller.id -eq 2 -and $_.ersteller.name -eq 'Diana'} | %{$_.outerXML}
# unter dem Zielpfad speichern
$xml.Save((Join-Path $ziel $file.Name))
}
![Mitglied: 10138557388 Mitglied: 10138557388](/images/members/profile_male_64x64.png)
$xml.data.projects.project | ?{$_.ersteller.id -eq 2 -and $_.ersteller.name -eq 'Diana'} | %{
$_.ersteller.id = '1'
$_.ersteller.name = 'Kurt'
}
![Mitglied: 10138557388 Mitglied: 10138557388](/images/members/profile_male_64x64.png)
%{} ist ein Alias für ForEach-Object das was in den Klammern steht wird für jedes Objekt in der Pipeline ausgeführt
?{} is ein Alias für Where-Object womit man die gewünschten Objekte auf ein Set anhand von Kriterien begrenzen/reduzieren kann
?{} is ein Alias für Where-Object womit man die gewünschten Objekte auf ein Set anhand von Kriterien begrenzen/reduzieren kann