2017-01-16 3 views
1

私はそうのようなxmlファイルを持っている:各プロパティに固有の名前がある場合、PowerShellでXMLを解析するにはどうすればよいですか?

<employees> 
    <employee> 
     <name>Johnny Rocket</name> 
     <age>40</age> 
     <somethingelse>Whatever</somethingelse> 
     <another>Whatever Again</another> 
     ##.... lots more ....## 
    </employee> 
    <employee> 
     ##...... 
    </employee> 

</employees> 

私はあなたが見る各「従業員」用のカスタムのPowerShellオブジェクトを作成します。しかし、実際には数十もあるため、プロパティ(Name、Age、SomethingElse、何でも)を明示的に記述する必要はありません。私はオブジェクトの各プロパティを角括弧内の名前にする必要があります。

大括弧内の項目が2つの単語であれば、解決策が必要になります。次の例では、私は、オブジェクトのメンバーが値「パスタ」と「食」という名前にしたいと思う:

<Food Type="Italian">Pasta</Food>

メンバーの名前は何によって定義されたカスタムオブジェクトを作成することができます解決策はありますPowerShell 2で動作するかっこ内にありますか?

答えて

0

はい、あなたはChildNodesプロパティで指定したXMLノードのすべての子ノードを列挙することができます

$EmployeesXml = [xml](Get-Content .\employees.xml) 

# Locate all <employee> nodes, iterate over them 
foreach($EmployeeNode in $EmployeesXml.SelectNodes('//employees/employee')){ 
    # Create hashtable to hold employee data 
    $EmployeeData = @{} 
    # Iterate over each child node under <employee> 
    $EmployeeNode.ChildNodes |ForEach-Object { 
     # Populate employee data based on the node name 
     $EmployeeData[$_.Name] = $_.InnerText 
    } 

    # Create object from collected data 
    New-Object psobject -Property $EmployeeData 
} 
+0

これはほぼ正確に私が欲しいものですが、私は1つのオブジェクトではなく、各従業員のための個別のオブジェクトをしたいですすべての従業員を含む。また、ハッシュテーブルではなく、名前、年齢などの各プロパティを明示的にオブジェクトのメンバーにすることができます( '-AddMember NoteProperty'のように)。私はこれを行う方法がありますか? – AlwaysQuestioning

+0

@AlwaysQuestioning上記のサンプルは、従業員ノードごとにオブジェクトを作成します。 'New-Object psobject -Property $ EmployeeData'は、' $ EmployeeData'ハッシュテーブルのデータに基づいたプロパティを持つオブジェクトを作成します –

+0

あなたはウィザードです、マティアス!ありがとうございました。 – AlwaysQuestioning

関連する問題