internet2107
Goto Top

Powershell - XML - Nummer finden

Ich habe folgendes Problem, folgende Frage. Vielleicht kann mir jemand helfen.

Folgende Sache.
In der XML ist folgende Struktur vorhanden:

<SNData>
<Unit>
    <Time>2020-01-12T06:24:46.613</Time>
    <Serial>3628506475645</Serial>
    <Error>1</Error>
    <ccode>4331017196</ccode>
    <ContUnits>
      <Serial-lvl1>66489279</Serial-lvl1>
      <Serial-lvl1>67176108</Serial-lvl1>
    </ContUnits>
  </Unit>
</SNData>

Mein Problem ist nun folgendes.
Ich möchte bei der Sucheingabe der z.B. Nummer "66489279" (wie oben) als Ergebnis die Serial angezeigt bekommen, die in diesem "Unit" Container verbunden ist.
In dem Fall sollte also angezeigt werden: "3628506475645"
Leider tue ich mich damit schwer.

Ich bekomme zwar z.B. so etwas hin:
[xml]$catalogXML = (Get-Content ("C:\temp\test.xml"))  
$catalogXML.SNData.Unit.ContUnits."SN-level1" | where {$_ -eq "66489279"}  


Oder
$catalogXML.SNData.Unit.ContUnits."Serial-lvl1" | where {$_ -eq "66489279"} | select $catalogXML.SNData.Unit.Serial  
aber beim letzten Code werden mir wieder alle <Serial> aus allen Blöcken angezeigt.

Jemand eine Idee, einen Tipp? Danke vorab.

Content-ID: 1476513725

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

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

148656
Lösung 148656 06.11.2021 um 12:43:15 Uhr
Goto Top
Im Internet nix gefunden?
Wie wäre es mit den einfachsten Boardmitteln?
ISE öffnen und lesen!
xml
149569
Lösung 149569 06.11.2021 aktualisiert um 14:41:47 Uhr
Goto Top
$xml = [xml]@'  
<?xml version="1.0" encoding="utf-8"?>  
<SNData>
  <Unit>
    <Time>2020-01-12T06:24:46.613</Time>
    <Serial>3628506475645</Serial>
    <Error>1</Error>
    <ccode>4331017196</ccode>
    <ContUnits>
      <Serial-lvl1>66489279</Serial-lvl1>
      <Serial-lvl1>67176108</Serial-lvl1>
    </ContUnits>
  </Unit>
</SNData>
'@  
$number = Read-Host "Nummer eingeben"  
$node = $xml.SelectSingleNode("/SNData/Unit[ContUnits/Serial-lvl1='$number']")  
if ($node){
    write-host "Serial: $(node.Serial)" -F Green  
}else{
    write-host "Nicht gefunden." -F Yellow  
}

oder als Einzeiler

(Select-XML "C:\temp\test.xml" -XPath "/SNData/Unit[ContUnits/Serial-lvl1='$(Read-Host "Nummer eingeben")']/Serial").Node.InnerText  
internet2107
internet2107 06.11.2021 um 20:04:40 Uhr
Goto Top
Ganz lieben Dank! Super. Genauso meinte ich das. Daumen hoch