スクリプトの設定ファイルをXMLでというのはよくある。
こんな設定ファイルがあったとすると、
<config>
<param1>1111</param1>
<param2>2222</param2>
<param3>3333</param3>
</config>
その読み込みは、
PS>$xml = [xml](Get-Content d:\desktop\config.xml) |
XMLタイプにキャストして参照するだけ。非常に簡単だ。
もうすこしXMLらしいサンプルを。
<Address>
<Person type="Personal">
<Name>佐藤</Name>
<Phone>111-1111</Phone>
</Person>
<Person type="Business">
<Name>吉田</Name>
<Phone>333-3333</Phone>
</Person>
</Address>
PS>$xml = [xml](Get-Content d:\desktop\sample.xml) type Name Phone PS>$xml.Address.Person[0].Name |
属性でクエリーすると
PS>$query = "/Address/Person[@type='Personal']/Name" #text |
ちなみに、このプロパティは#textなんて名前になっているので、 XXXX.#textでは参照できない。
この場合は、以下のようにすると参照できる。
PS>$xml.SelectNodes($query) | Set-Variable node |
ただ、不思議なことに以下のようにすると結果が返ってこない。
PS>$node = $xml.SelectNodes($query) |
これも駄目だ。
PS>($xml.SelectNodes($query))."#text" |
なぜ?
意味が分からない・・・。
とりあえず逃げ道(Set-Variable)があるので放置(笑)
<追記>
PowerShell: ◆$a = $b と $a | set b の違い
,$node | gm とやって$node自体のメンバーを確かめてみる。
PS>,$node | gm
Name MemberType Definition |
どうやらitemOfを使えばよさそうだ。
PS>$node.itemof(0)."#text" |
<追記おわり>
要素でもクエリーしてみる。
PS>$query = "/Address/Person[Name='吉田']/Phone" #text PS>$node."#text" |
0 件のコメント:
コメントを投稿