h41msh1c0r
Goto Top

Powershell bestimmtes XML Element auslesen

Hi@PS Profi's,

$value = select-Xml $global:xmlEntriesFile -XPath "//Entry[@Number=$_.RowIndex]/ablage" | select innerxml  
Write-Host $value

Ein Entry ist wiefolgt aufgebaut:

    <Entry Number="1">  
      <typ>A</typ>
      <version>2</version>
      <datum>12.12.2015</datum>
      <ablage>Ort</ablage>
    </Entry>

Wenn ich nun im Datagrid mir eine Zeile aussuche will ich mir den passenden Ort aus dem XML holen.
Das $value bleibt allerdings bisher leer. ;(

Alternative:

$Ablage = ($global:EntriesXML.SelectSingleNode('//Entry[@Number=$_.RowIndex]/ablage')).InnerText  
Write-Host $Ablage

Will auch nicht. Hier kommt er mir mit folgender Fehlermeldung:

ERROR: Exception calling "SelectSingleNode" with "1" argument(s): "Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined  
ERROR: function."  

Gruß vom H41mSh1C0r

Content-ID: 294184

Url: https://administrator.de/forum/powershell-bestimmtes-xml-element-auslesen-294184.html

Ausgedruckt am: 17.04.2025 um 06:04 Uhr

114757
114757 25.01.2016 aktualisiert um 15:17:51 Uhr
Goto Top
Moin Schisser,
Zitat von @H41mSh1C0R:
Will auch nicht. Hier kommt er mir mit folgender Fehlermeldung:

> ERROR: Exception calling "SelectSingleNode" with "1" argument(s): "Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined  
> ERROR: function."  
> 
Das ist dein Hinweis, deine XML-Datei hat einen Namespace, den wir hier leider nicht sehen können. Dieser muss als weiterer Parameter beim parsen einer XML-Datei mit SelectSingleNode angegeben werden! Also poste mal die komplette XML-Datei mit Header, dann mach ich dir ein Beispiel wie das mit Namespace funktioniert.

Gruß jodel32
H41mSh1C0R
H41mSh1C0R 25.01.2016 aktualisiert um 15:29:23 Uhr
Goto Top
Hi Jodel

ist ein Standard XML vom Header(<? ?> her.

<?xml version="1.0" encoding="utf-8"?> 
<inhalt>
  <elements>
    <Entry Number="1"> 
      <typ>A</typ>
      <version>2</version>
      <datum>12.12.2015</datum>
      <ablage>Ort</ablage>
    </Entry>
  </elements>
</inhalt>

Das XML hab ich in der 2ten Version global geladen:

$global:EntriesXML = New-Object xml
$global:EntriesXML.load("c:\temp\Entries.xml")  

Gruß H41mSh1C0r
114757
Lösung 114757 25.01.2016 aktualisiert um 15:40:54 Uhr
Goto Top
Wat willste denn, geht doch ...
$xml = [xml]@" 
<?xml version="1.0" encoding="utf-8"?> 
<inhalt>
  <elements>
    <Entry Number="1"> 
      <typ>A</typ>
      <version>2</version>
      <datum>12.12.2015</datum>
      <ablage>Ort</ablage>
    </Entry>
  </elements>
</inhalt>
"@ 

$xml.SelectSingleNode("//Entry[@Number=1]/ablage").InnerText 

Ausgabe
Ort
H41mSh1C0R
H41mSh1C0R 25.01.2016 um 15:33:40 Uhr
Goto Top
Hmmmmmm

Grad ausprobiert geht, aber mit $_.RowIndex was mir brav die 1 liefert nicht.
Vielleicht fehlen ihm da die " ". Testing ....
114757
Lösung 114757 25.01.2016 aktualisiert um 15:40:44 Uhr
Goto Top
Ach ich sehs ...du hast einfache Hochkommas benutzt, darin werden keine Variablen aufgelöst face-wink !

Das muss so
........ SelectSingleNode("//Entry[@Number=$($_.RowIndex)]/ablage")  
H41mSh1C0R
H41mSh1C0R 25.01.2016 um 15:40:40 Uhr
Goto Top
fettes THX.

Das $() um $_.RowIndex hatte ich auch nicht. =)