XML nach Liste mit Werten durchsuchen
Guten Morgen.
Ich habe folgendes Problem: Ich habe eine XML Datei mit etlichen Angaben die ca 30.000 Datensätze hat. Nun will ich diese XML auslesen und in einer .csv speichern. Gespeichert werden soll immer ein kompletter Datensatz wenn zwei Werte vorkommen! Die beiden Werte befinden sich in einer weiteren csv.
Gegeben sind:
Ausgangs XML
Mit den den Spalten: MODEL_NR und IDE_COLOR_CODE
CSV Datei zum Durchsuchen
BA4356;11
BA4666;512
BA4865;409
habe ich zusammengesucht und gebastalt aber es hilft mir nicht wirklich weiter. Kann mir jemand helfen? Ob mit Batch, Powershell etc ist erstmal egal
Ich habe folgendes Problem: Ich habe eine XML Datei mit etlichen Angaben die ca 30.000 Datensätze hat. Nun will ich diese XML auslesen und in einer .csv speichern. Gespeichert werden soll immer ein kompletter Datensatz wenn zwei Werte vorkommen! Die beiden Werte befinden sich in einer weiteren csv.
Gegeben sind:
Ausgangs XML
Mit den den Spalten: MODEL_NR und IDE_COLOR_CODE
CSV Datei zum Durchsuchen
BA4356;11
BA4666;512
BA4865;409
@echo on
SET XMLDATEI=D:\test\test.xml
for /f "tokens=3,4" %%i in ('find "<MODEL_NR>" %XMLDATEI%') do set NR=%%i
Please also mark the comments that contributed to the solution of the article
Content-Key: 317120
Url: https://administrator.de/contentid/317120
Printed on: April 19, 2024 at 04:04 o'clock
12 Comments
Latest comment
Und keiner weiß wie deine XML aussieht und was du daraus genau brauchst , und ob die CSV Überschriften hat oder nicht, oder sollen wir uns das aus den Fingern saugen??
R.
R.
Les meine Frage noch mal ganz in Ruhe durch!
soll der Datensatz mit in die Datei gespeichert werden.
Und wie willst du das in der CSV abgebildet haben ??? Da sind ja dann noch weitere Verschachtelungen drin.
Dann ist es aber keine csv mehr sondern eine XML-Datei, das ist ein großer Unterschied!
# ----
$csvsearch = 'C:\search.csv'
$xmlpath = 'c:\xmldatei.xml'
$out = 'C:\out.txt'
# ----
$xml = [xml](gc $xmlpath)
(Import-CSV $csvsearch -Delimiter ";" -Header 'ModelNr','ColorCode') | %{
$nodes = $xml.SelectNodes("//Model_Type_1[MODEL_NR = '$($_.ModelNr)' and Colors/Color/IDE_COLOR_CODE = '$($_.ColorCode)']")
if ($nodes.Count -gt 0){
$nodes | %{$_.outerXML}
}
} | set-content $out -Encoding UTF8
2.)
Korrektur siehe oben.1.) Die Überschriften fehlen.
Was für Überschriften ?? In einer XML gibt es keine Überschriften nur Elemente, Nodes und Attribute, also benutze die richtigen Termini! Danke.min. PS 3.0 erforderlich
# ----
$csvsearch = 'D:\test\search.csv'
$xmlpath = 'D:\test\xmldatei.xml'
$out = 'D:\test\out.xml'
# ----
$xml = [xml](gc $xmlpath)
$nodes = @()
(Import-CSV $csvsearch -Delimiter ";" -Header 'ModelNr','ColorCode') | %{
$nodes += $xml.SelectNodes("//Model_Type_1[MODEL_NR = '$($_.ModelNr)' and Colors/Color/IDE_COLOR_CODE = '$($_.ColorCode)']")
}
$xml.SelectNodes("//Model_Type_1") | ?{$_ -notin $nodes} | %{$_.ParentNode.RemoveChild($_) | out-null}
$xml.Save($out)
??? Irgendwie verstehe ich dich nicht ... Mit "ganzem Datensatz" verstehe ich einen ganzen Knoten mit Namen Model_Type_1 wenn beide Eigenschaften übereinstimmen, oder sollen hier die Color-Knoten ausgefiltert werden??
Wenn es um die Color-Knoten geht dann musst du es so machen:
Für's nächste mal bitte direkt eine exakte Beschreibung deines Anliegens ohne das wir dir alles aus der Nase ziehen müssen .
Ich bin dann weg.
Gruß R.
Wenn es um die Color-Knoten geht dann musst du es so machen:
# ----
$csvsearch = 'D:\test\search.csv'
$xmlpath = 'D:\test\xmldatei.xml'
$out = 'D:\test\out.xml'
# ----
$xml = [xml](gc $xmlpath)
$nodes = @()
(Import-CSV $csvsearch -Delimiter ";" -Header 'ModelNr','ColorCode') | group ModelNr | %{
$colors = $_.Group.ColorCode
$found = $xml.SelectNodes("//Model_Type_1[MODEL_NR = '$($_.Name)']")
if ($found.Count -gt 0 ){
$nodes += $found
$found | %{$_.Colors.Color | ?{$_.IDE_COLOR_CODE -notin $colors} | %{$_.ParentNode.RemoveChild($_) | out-null}}
}
}
$xml.SelectNodes("//Model_Type_1") | ?{$_ -notin $nodes} | %{$_.ParentNode.RemoveChild($_) | out-null}
$xml.Save($out)
Für's nächste mal bitte direkt eine exakte Beschreibung deines Anliegens ohne das wir dir alles aus der Nase ziehen müssen .
Ich bin dann weg.
Gruß R.