You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell将PSCustomObject转为属性名作为标签的XML?

实现PSCustomObject转指定格式XML的方法

默认的ConvertTo-Xml命令会生成带<Property Name="XXX">的节点,要得到属性名直接作为节点名的XML,可通过以下两种方法实现:

方法一:手动构建XML文档(推荐,健壮性高)

通过System.Xml.XmlDocument类手动创建节点,能精准控制XML结构,适合处理复杂对象或包含特殊字符的属性值:

# 示例PSCustomObject
$data = [PSCustomObject]@{
    ABC = 1
    PQR = 2
    XYZ = 3
}

# 初始化XML文档
$xml = New-Object System.Xml.XmlDocument
$xmlDeclaration = $xml.CreateXmlDeclaration("1.0", "utf-8", $null)
$xml.AppendChild($xmlDeclaration) | Out-Null

# 创建根节点<Objects>
$objectsRoot = $xml.CreateElement("Objects")
$xml.AppendChild($objectsRoot) | Out-Null

# 创建<Object>子节点
$objectNode = $xml.CreateElement("Object")
$objectsRoot.AppendChild($objectNode) | Out-Null

# 遍历对象属性,生成对应节点
foreach ($prop in $data.PSObject.Properties) {
    $propElement = $xml.CreateElement($prop.Name)
    $propElement.InnerText = $prop.Value
    $objectNode.AppendChild($propElement) | Out-Null
}

# 输出格式化后的XML(PowerShell 7+可用Format-Xml,Windows PowerShell可使用$xml.Save([Console]::Out))
$xml.OuterXml | Format-Xml

方法二:正则替换(快速简单,适合简单场景)

对ConvertTo-Xml的输出结果做正则替换,直接将<Property Name="XXX">YYY</Property>替换为<XXX>YYY</XXX>:

# 示例PSCustomObject
$data = [PSCustomObject]@{
    ABC = 1
    PQR = 2
    XYZ = 3
}

# 先执行默认转换
$rawXml = ConvertTo-Xml -As String -NoTypeInformation -InputObject $data

# 正则替换节点格式
$formattedXml = $rawXml -replace '<Property Name="([^"]+)">([^<]+)</Property>', '<$1>$2</$1>'

# 输出结果
$formattedXml

注意:此方法仅适合属性值不含XML特殊字符(如<、>)的简单场景,若属性值包含特殊字符,可能会破坏XML结构。

内容的提问来源于stack exchange,提问作者Prasad Gavande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:22:49