0

これは非常に単純だと思います。PowerShellから始めたばかりで、ネットを検索して数時間経っても簡単な解決策が見つからないようです。

基本的に私は次のxmlファイルを持っています

<Config>
<System>
<Server>
    <Name>host1</Name> 
    <Service>service1</Service>
    <Service>service2</Service>
</Server>
<Server>
    <Name>host2</Name> 
    <Service>service1</Service>
</Server>
</System>

<System2>
<Server>
    <Name>host1</Name> 
    <Service>service1</Service>
    <Service>service2</Service>
</Server>
<Server>
    <Name>host2</Name> 
    <Service>service1</Service>
     <Service>service2</Service>
     <Service>service3</Service>

</Server>
</System2>
</Config>

そして、コンテンツをギザギザの2D配列に入れたいので、システムは次のようになります。

  • (host1)、(service1、service2)
  • (host2)、(service1)

各要素を繰り返し処理して、そのような配列を作成することは可能ですか?

[0] [0]を使用してホスト名を参照し、[1] [1..x]を使用してそのホストのすべてのサービスを参照できるように、上記のようにデータを保存したいと考えています。

それは意味がありますか?

どんな助けやより良いアプローチも大歓迎です。

4

1 に答える 1

3

代わりにハッシュテーブルを使用することを考えるかもしれません。結果を反復処理して、ホスト名で結果を検索できます。例:

$xml = [xml]@'
    <Config>
    <System>
    <Server>
        <Name>host1</Name> 
        <Service>service1</Service>
        <Service>service2</Service>
    </Server>
    <Server>
        <Name>host2</Name> 
        <Service>service1</Service>
    </Server>
    </System>

    <System2>
    <Server>
        <Name>host1</Name> 
        <Service>service1</Service>
        <Service>service2</Service>
    </Server>
    <Server>
        <Name>host2</Name> 
        <Service>service1</Service>
        <Service>service2</Service>
        <Service>service3</Service>
    </Server>
    </System2>
    </Config>
'@

$ht = @{}
$hostnameNodes = $xml | Select-Xml -XPath '//Name'
foreach ($node in @($xml | Select-Xml -XPath '//Name'))
{
    $hostname = $node.Node.InnerText.Trim()
    $services = @($node.Node.ParentNode.Service)
    foreach ($service in $services)
    {
        $ht["$hostname"] += @($service.Trim())
    }
}

$ht

出力:

Name                           Value                                    
----                           -----                                    
host1                          {service1, service2, service1, service2} 
host2                          {service1, service1, service2, service3} 
于 2012-12-17T18:12:46.200 に答える