haberl92
Goto Top

XML nach Zahl durchsuchen und darunter stehenden Text ausgeben

Hallo,

ich habe ein Problem mit PowerShell.

Ich möchte eine Zahl eingeben und er soll mir dann den darunter liegenden Pfad als Variable speichern.

Auf den Bild sieht man die Zahl, die ich eingeben würde (Blau) und der Pfad, den ich erhalten möchte (Rot)


Bisher kann ich nur nach der "Page ID" suchen lassen und die Ausgabe scheitert komplett. (ist leer)


$ordner = "C:\Users\User\Desktop\Test"  
$IRN = Read-Host "Nummer eingeben"  
Get-ChildItem $ordner -File -Filter *.XML -pipelinevariable file | %{
     Select-XML -Path $_.Fullname -XPath "//Page[@ID='$IRN']//Images[@ID='2']" | %{$_.Node.innerText} | Set-Content "$ordner\$($file.Basename).txt"  
}


Würde mich sehr über Hilfe freuen

MfG
bild 1

Content-ID: 1938432835

Url: https://administrator.de/contentid/1938432835

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

colinardo
colinardo 18.02.2022 aktualisiert um 11:57:40 Uhr
Goto Top
Servus.
Also immer nur den Path des ersten Bildes im Rear-Knoten für die Paginator im Front Knoten?, in dem Fall dann
$ordner = "C:\Users\User\Desktop\Test"  
$IRN = Read-Host "Nummer eingeben"  
foreach($file in Get-ChildItem $ordner -File -Filter *.XML ){
     $result = Select-XML -Path $file.Fullname -XPath "//Rear/Images/Image[../../../Front/Attributes/Paginator = '$IRN'][1]/@Path" | %{$_.Node.value}   
     if ($result){
         write-host "Ergebnis für Datei $($file.Name): $result" -F Green  
     }else{
         write-host "Kein Ergebnis in '$($file.Name)' gefunden!" -F Yellow  
     }
}
Das liefert exakt das was du oben rot markiert hast.

Grüße Uwe

p.s. Vielleicht noch etwas spannende Lesefutter für stürmische Wochenenden gefällig face-smile.
Haberl92
Haberl92 18.02.2022 um 14:44:23 Uhr
Goto Top
Zitat von @colinardo:

Servus.
Also immer nur den Path des ersten Bildes im Rear-Knoten für die Paginator im Front Knoten?, in dem Fall dann
$ordner = "C:\Users\User\Desktop\Test"  
$IRN = Read-Host "Nummer eingeben"  
foreach($file in Get-ChildItem $ordner -File -Filter *.XML ){
     $result = Select-XML -Path $file.Fullname -XPath "//Rear/Images/Image[../../../Front/Attributes/Paginator = '$IRN'][1]/@Path" | %{$_.Node.value}   
     if ($result){
         write-host "Ergebnis für Datei $($file.Name): $result" -F Green  
     }else{
         write-host "Kein Ergebnis in '$($file.Name)' gefunden!" -F Yellow  
     }
}
Das liefert exakt das was du oben rot markiert hast.

Grüße Uwe

p.s. Vielleicht noch etwas spannende Lesefutter für stürmische Wochenenden gefällig face-smile.

Das ist perfekt. Ich füge jetzt noch andere Befehle hinzu und schaue, ob es immer noch perfekt damit klar kommt.
Ich möchte nämlich noch, dass er mir das JPG dann in ein Verzeichnis, welche den Namen der XML hat, kopiert und das JPG soll als Namen die Nummer, die ich eingebe, erhalten.
Vielleicht ist es für dich eine Kleinigkeit, also wenn du helfen willst... sehr gerne ;)
colinardo
colinardo 18.02.2022 aktualisiert um 15:40:23 Uhr
Goto Top
Ich möchte nämlich noch, dass er mir das JPG dann in ein Verzeichnis, welche den Namen der XML hat, kopiert und das JPG soll als Namen die Nummer, die ich eingebe, erhalten.
Weil heute Freitag ist die Kurzfassung...
#...
copy-item "d:\wherever_the_rootfolder_lies\$result" -Destination "$((md "$($file.DirectoryName)\$($file.Basename)" -force).Fullname)\$IRN.jpg"  
#...

Bitte dann auch als gelöst markieren. Merci.

G. Uwe
Haberl92
Haberl92 18.02.2022 um 16:56:26 Uhr
Goto Top
Das mit Kopieren hab ich schon ein wenig anders gelöst. Passt auch für meine Zwecke.

Nun hab ich ein weiteres Problem:
Die Nummer $IRN die ich eingebe soll automatisch aus einer Textdatei gelesen werden

die Textdatei sieht ungefähr so aus:

AZHscan_5_220108_889088_00013.xml
200850295322
200850295315
200850293083
200850280458

Nun müsste das Script für jede Nummer ab Zeile 2 einmal durchlaufen und die Bilder in den Ordner kopieren.


Das ist mein bisheriger Code:
$ordner = "C:\Users\User\Desktop\Test"  
$IRN = Read-Host "IRN eingeben"  
foreach($file in Get-ChildItem $ordner\Server -File -Filter *.xml ){
     $result = Select-XML -Path $file.Fullname -XPath "//Rear/Images/Image[../../../Front/Attributes/Paginator = '$IRN'][1]/@Path" | %{$_.Node.value}   
     if ($result){
         write-host "Ergebnis für Datei $($file.Name): $result" -F Green  
     }else{
         write-host "Kein Ergebnis in '$($file.Name)' gefunden!" -F Yellow  
     }
}
if ($result){
New-Item $ordner\Bilder -type directory
Copy-Item -Path $ordner\Server\$result -Destination $ordner\Bilder\$IRN-Vorderseite.jpg
}
foreach($file in Get-ChildItem $ordner\Server -File -Filter *.xml ){
     $result2 = Select-XML -Path $file.Fullname -XPath "//Front/Images/Image[../../../Front/Attributes/Paginator = '$IRN'][1]/@Path" | %{$_.Node.value}   
     if ($result2){
         write-host "Ergebnis für Datei $($file.Name): $result2" -F Green  
     }else{
         write-host "Kein Ergebnis in '$($file.Name)' gefunden!" -F Yellow  
     }
}
if ($result){
Copy-Item -Path $ordner\Server\$result2 -Destination $ordner\Bilder\$IRN-Rückseite.jpg
}

aber mit dem Text auslesen und für jede Zeile ausführen bin ich noch ratlos.
colinardo
Lösung colinardo 18.02.2022 aktualisiert um 17:11:22 Uhr
Goto Top
aber mit dem Text auslesen und für jede Zeile ausführen bin ich noch ratlos.
Was fürs Weekend
foreach($line in Get-Content "d:\irn_nummern.txt"){  
    $line
    # ...
}
Sollte dir den nötigen Schubs geben, sollst ja auch was hier mitnehmen 😉

Schönes Wochenende
Haberl92
Haberl92 18.02.2022 um 17:55:20 Uhr
Goto Top
Zitat von @colinardo:

Schönes Wochenende

Danke. Wünsch ich dir auch