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-Key: 1476513725

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

Printed on: May 10, 2024 at 22:05 o'clock

Mitglied: 148656
Solution 148656 Nov 06, 2021 at 11:43:15 (UTC)
Goto Top
Im Internet nix gefunden?
Wie wäre es mit den einfachsten Boardmitteln?
ISE öffnen und lesen!
xml
Mitglied: 149569
Solution 149569 Nov 06, 2021 updated at 13:41:47 (UTC)
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  
Member: internet2107
internet2107 Nov 06, 2021 at 19:04:40 (UTC)
Goto Top
Ganz lieben Dank! Super. Genauso meinte ich das. Daumen hoch