Powershell - 使用特定命名空间创建XML

时间:2017-09-19 10:45:57

标签: xml powershell

我需要创建这个XML:

<?xml version="1.0" encoding="UTF-8"?>
<SRP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="sample.xsd">

..但我知道如何使用XMLWriter编写命名空间(例如:

$XmlWriter.WriteAttributeString("xmlns", "xsi", 
"http://www.w3.org/2000/xmlns/", 
"http://www.w3.org/2001/XMLSchema-instance");

..我一直无法在变量中这样做:

[xml]$XML = New-Object System.Xml.XmlDocument
$Declaration=$XML.CreateXmlDeclaration("1.0","UTF-8",$Null)
$XML.AppendChild($Declaration) 

我尝试过Namespacemanager的各种组合,但无济于事......这似乎是一个愚蠢的问题,但到目前为止我一直无法复制它(没有使用带有硬编码XML的here-string并将其转换为当然是XML,但我更喜欢以“正确”的方式做到:)

感谢大家到目前为止阅读:)

1 个答案:

答案 0 :(得分:3)

您不需要命名空间管理器。只需使用正确的命名空间创建节点/属性,让XML处理器找出放置它们的位置。

对于你的例子:

$x = New-Object Xml.XmlDocument
$x.AppendChild($x.CreateXmlDeclaration("1.0","UTF-8",$null))

$node = $x.CreateElement("SRP")

$attr = $x.CreateAttribute("xsi","noNamespaceSchemaLocation","http://www.w3.org/2001/XMLSchema-instance")
$attr.Value="schema.xsd"

$node.SetAttributeNode($attr)
$x.AppendChild($node)

$x.OuterXml