1

次の XML 出力があります。

<?xml version="1.0" encoding="utf-8"?>
<Objects>
  <Object>
    <Property>
      <Property Name="CustomerName">MyCustomerName</Property>
      <Property Name="Environment">Integration</Property>
      <Property Name="isVdi">false</Property>
    </Property>
    <!-- ... (Continues here, but I cut if off since it has nothing to do with the problem) -->
  </Object>
</Objects>

このコードを次の方法で生成します。

$customerInformation = [PSCustomObject]@{
    CustomerName = $CustomerName;
    Environment  = $Environment;
    isVdi        = $isVdi;
}

私が気に入って<Property>いるのは、オブジェクトの周りにあるタグに名前を付けることです。

例えば:

<?xml version="1.0" encoding="utf-8"?>
<Objects>
  <Object>
    <Property Name="CustomerInformation"> //Here I want to add the "CustomerInformation"
      <Property Name="CustomerName">MyCustomerName</Property>
      <Property Name="Environment">Integration</Property>
      <Property Name="isVdi">false</Property>
    </Property>
  </Object>
</Objects>

しかし、私はそれを行う方法がわかりません.それが可能かどうか、またはtype属性を使用する必要があるかどうかさえわかりません. 私は XML に慣れていないので、ここで助けていただければ幸いです。

私がこれまでに試したこと:

  • Googleで解決策を見つけようとしました。
  • XMLを手動で作成しようとしました(おそらくうまくいくかもしれませんが、きれいなコードを維持することがますます複雑になるため、実際には望んでいません

また、別のプロパティをオブジェクトに単純に追加してから、好きな名前を付けてname="CustomerInformation"空にすることも考えましたが、オブジェクトの最上位にある方がよいでしょう。

4

1 に答える 1

1

そのカスタム オブジェクトを別のカスタム オブジェクトにネストします。

$customerInformation = [PSCustomObject]@{
    'CustomerInformation' = [PSCustomObject]@{
        'CustomerName' = $CustomerName
        'Environment'  = $Environment
        'isVdi'        = $isVdi
    }
}

次に、その構造を変換します。

$xml = $customerInformation | ConvertTo-Xml -Depth 2

ただし、これを機能させるには、値が 1 より大きいパラメータを追加する必要-Depthがあることに注意してください。このパラメータのデフォルト値は 1 です。オブジェクト階層全体が変換されていないため、次のエラーが発生します。

ConvertTo-Xml : 予期しないファイルの終わりが発生しました。以下の要素は
閉じていない: オブジェクト、オブジェクト。行 7、位置 16。
行:1 文字:31
+ $xml = $顧客情報 | ConvertTo-Xml
+ ~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [ConvertTo-Xml], XmlException
    + FullyQualifiedErrorId : System.Xml.XmlException,Microsoft.PowerShell.Commands.ConvertToXmlCommand
于 2018-02-01T09:55:52.980 に答える