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

如何在PowerShell中使用XmlWriter()正确创建指定格式的XML文件

故障原因

所有异常和输出不符合预期的问题核心来自3个点:

  • 变量名拼写错误:初始化时创建的XmlWriter对象变量是$XmlWriter,但写入<Item>起始标签、写入version属性时,调用的是拼写错误的$xmlWrite(变量名末尾少了字母r)。PowerShell会将不存在的变量识别为$null,这两行代码实际完全没有执行。
  • 当你用正确的变量名$xmlWriter写入<Name>元素时,XmlWriter默认将其判定为文档根元素,写完后直接进入根元素闭合状态,后续再写入同级的<GUID>元素就触发了状态不合法的报错。
  • 未显式配置XmlWriter参数:默认配置会自动输出XML声明头,且默认一致性级别会强制要求单根元素的标准文档结构;缩进未生效也是因为写入流程被笔误打乱,根本没有走到按配置缩进根节点子元素的步骤。另外你写入的version属性值为"1.0",和预期要求的"1"不匹配。
正确实现代码
# 初始化XmlWriter配置
$xmlsettings = New-Object System.Xml.XmlWriterSettings
$xmlsettings.Indent = $true
$xmlsettings.IndentChars = "  " # 配置为2空格缩进,和预期格式对齐
$xmlsettings.OmitXmlDeclaration = $true # 关闭自动生成的XML声明头
$xmlsettings.ConformanceLevel = [System.Xml.ConformanceLevel]::Auto

# 初始化写入实例,全程保持变量名拼写一致
$xmlWriter = [System.XML.XmlWriter]::Create("$PSScriptRoot\Myproject.xml", $xmlsettings)

# 写入根节点及子元素
$xmlWriter.WriteStartElement("Item") 
$xmlWriter.WriteAttributeString("version", "1") # 属性值与预期一致为"1"
$xmlWriter.WriteElementString("Name", $myProject) # 直接使用你已定义的项目名变量即可
$xmlWriter.WriteElementString("GUID", (New-Guid).Guid.ToUpper())
# 闭合根节点
$xmlWriter.WriteEndElement()

# 刷新并关闭写入流
$xmlWriter.Flush()
$xmlWriter.Close()
验证结果

运行上述代码后,生成的Myproject.xml内容与预期完全一致:

<Item version="1">
  <Name>Myproject</Name>
  <GUID>4821CC01-CDB0-4FD7-9F1E-0B1EDF32ACE9</GUID>
</Item>
注意事项
  • PowerShell默认不强制要求提前声明变量,调用.NET对象时务必核对变量名拼写,避免单个字符错误导致整个写入逻辑完全偏离预期。
  • 若不需要XML声明头,必须显式将$xmlsettings.OmitXmlDeclaration设为$true,即使不手动调用WriteStartDocument(),XmlWriter也会在首次写入元素时自动补全声明。
  • 可通过$xmlsettings.IndentChars自定义缩进字符,默认使用4空格缩进,可根据格式需求自行调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:18:33