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

PowerShell中XmlDocument.CreateElement方法的冒号转义问题

解决PowerShell中XmlDocument.CreateElement保留节点名冒号的问题

在XML规范里,元素名称中的冒号是专门用于命名空间前缀的,所以直接用$xmldoc.CreateElement("test:example")时,PowerShell会把test识别为未定义的命名空间前缀,最终只生成<example>节点。要保留冒号且不将其作为命名空间前缀,可尝试以下两种方案:

方案一:修改节点OuterXml后导入文档

先创建临时节点,手动替换其OuterXml中的节点名,再导入到目标文档中:

$xmldoc = New-Object System.Xml.XmlDocument
# 创建临时节点
$tempNode = $xmldoc.CreateElement("example")
# 替换节点名为带冒号的形式
$tempNode.OuterXml = $tempNode.OuterXml.Replace("<example>", "<test:example>")
# 将修改后的节点导入当前文档
$node = $xmldoc.ImportNode($tempNode, $true)
$xmldoc.AppendChild($node)
# 验证结果
$xmldoc.InnerXml

执行后会生成<test:example />节点。

方案二:用XmlWriter直接写入XML

XmlWriter可绕过XmlDocument对命名空间前缀的严格检查,直接生成带冒号的节点:

$stringWriter = New-Object System.IO.StringWriter
$xmlWriter = [System.Xml.XmlWriter]::Create($stringWriter)
# 直接写入带冒号的节点名
$xmlWriter.WriteStartElement("test:example")
$xmlWriter.WriteEndElement()
$xmlWriter.Flush()
# 将生成的XML内容加载到XmlDocument中
$xmlContent = $stringWriter.ToString()
$xmldoc = New-Object System.Xml.XmlDocument
$xmldoc.LoadXml($xmlContent)
# 验证结果
$xmldoc.InnerXml

注意:这种带冒号但不属于命名空间前缀的节点名,其实不符合XML规范,部分解析器可能会报错,仅在必须保留该结构的场景下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:42:47