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

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

Printed on: April 26, 2024 at 23:04 o'clock

Mitglied: 114757
114757 Jan 25, 2016 updated at 14:17:51 (UTC)
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
Member: H41mSh1C0R
H41mSh1C0R Jan 25, 2016 updated at 14:29:23 (UTC)
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
Mitglied: 114757
Solution 114757 Jan 25, 2016 updated at 14:40:54 (UTC)
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
Member: H41mSh1C0R
H41mSh1C0R Jan 25, 2016 at 14:33:40 (UTC)
Goto Top
Hmmmmmm

Grad ausprobiert geht, aber mit $_.RowIndex was mir brav die 1 liefert nicht.
Vielleicht fehlen ihm da die " ". Testing ....
Mitglied: 114757
Solution 114757 Jan 25, 2016 updated at 14:40:44 (UTC)
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")  
Member: H41mSh1C0R
H41mSh1C0R Jan 25, 2016 at 14:40:40 (UTC)
Goto Top
fettes THX.

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