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 有点陌生,很乐意在这里得到一些帮助。

到目前为止我已经尝试过:

  • 试图通过谷歌找到解决方案。
  • 尝试手动创建 XML(可能可行,但不是我真正想要的,因为维护干净的代码会变得越来越复杂

我还考虑过简单地将另一个属性添加到对象中,然后将其命名为name="CustomerInformation"并让 im 为空,但如果它位于对象的顶层会更好。

4

1 回答 1

1

将该自定义对象嵌套在另一个自定义对象中:

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

然后转换该结构:

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

但是请注意,您必须添加-Depth值 >1 的参数才能使其正常工作。该参数的默认值为 1,这将导致以下错误,因为它没有转换整个对象层次结构:

ConvertTo-Xml : 文件意外结束。以下元素是
未关闭:对象,对象。第 7 行,第 16 位。
在行:1 字符:31
+ $xml = $客户信息 | 转换为 XML
+ ~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [ConvertTo-Xml], XmlException
    + FullyQualifiedErrorId:System.Xml.XmlException,Microsoft.PowerShell.Commands.ConvertToXmlCommand
于 2018-02-01T09:55:52.980 回答