2017-03-17 4 views
0

Ich möchte den Knotennamen eines Attributs mithilfe von Powershell abrufen. Kann mir bitte jemand Bescheid geben, wenn wir eine eingebaute Funktion für das selbe haben.Abrufen des Elementnamens eines Attributs in xml mit Powershell

Folgende ist meine XML-Datei pricefile.xml genannt

<model type="model1" name="default" price="12.12" date="some_value"> 
    <PriceData> 
    <item name="watch" price="24.28" date="2013-12-01"/> 
    <item name="toy" price="22.34" date="2013-12-02"/> 
    <item name="bread" price="24.12" date="2013-12-03"/> 
    </PriceData> 
</model> 

sagen, dass ich den Namen des Elements „item“ für das Attribut „Spielzeug“ zu wollen. Wie kann ich diese Daten bekommen?

Das ist was ich bisher habe.

[xml]$item = get-content pricefile.xml 
$item.SelectNodes("//item/@*") 

die mir die folgende Ausgabe gibt, aber ich weiß nicht, wie das Element des Attributs von hier oder es ist übergeordneter Knoten.

#text                                     
-----                                     
watch                                     
24.28                                     
2013-12-01                                    
toy                                      
22.34                                     
2013-12-02                                    
bread                                     
24.12                                     
2013-12-03 

Wenn ich einen der folgenden Befehle verwende, bekomme ich keine Ausgabe.

[xml]$item = get-content pricefile.xml 

$item.SelectNodes("//item/@*").parentnode 

$item.SelectNodes("//item/@*") | where {$_.parentnode} 

Antwort

1

ein XmlAttribute Objekt mit zu beginnen gegeben, Sie übergeordnete Element über OwnerElement Eigentum erhalten können. Beachten Sie, dass ParentNode hier nicht funktioniert, da der Wert immer leer ist XmlAttribute:

2

Zuerst das Element mit dem name Attributwert auswählen toy:

$toy = $item.SelectSingleNode("//*[@name='toy']") 

Da Powershell hilfreich sein versucht, und setzt das name Attribut als eine Eigenschaft auf dem Objekt, werden wir müssen die Eigenschaft Accessor für die eigentliche Tag Name Eigenschaft verwenden:

$toy.get_Name() 
2

Hier ist der XPath Übrigens:

[xml]$item = @' 
    <model type="model1" name="default" price="12.12" date="some_value"> 
    <PriceData> 
     <item name="watch" price="24.28" date="2013-12-01"/> 
     <item name="toy" price="22.34" date="2013-12-02"/> 
     <item name="bread" price="24.12" date="2013-12-03"/> 
    </PriceData> 
    </model> 
'@ 

(Select-XML -Xml $item -XPath "//item[@name=""toy""]").Node 
(Select-XML -Xml $item -XPath "//item[@name=""toy""]").Node.get_Name() 
1

Hier ist ein weiterer Weg, um die gewünschten Informationen zu erhalten:

$item.model.PriceData.Item | ? name -eq toy 
Verwandte Themen