2011-06-01 74 views
9

我创建这样一个XmlDocument:保存格式良好的XML从PowerShell的

$doc = New-Object xml 

然后,节点填充它后,我将它保存:

$doc.Save($fileName) 

的问题是,它不将XML声明添加到文档的开头,导致格式错误的文档。换句话说,它只保存一个片段。我怎样才能给它添加一个正确的XML声明?

+3

FYI缺乏一个XML声明不会马由于XML文件不是必需的元素,因此XML文件格式不正确。 – 2011-06-04 22:37:18

回答

11

您需要使用XmlTextWriter类来格式化输出。下面是一个示例,虽然你可能要演变为你有什么具体的需求超出了添加标题:

$doc = [xml]"<html>Value</html>" 
$sb = New-Object System.Text.StringBuilder 
$sw = New-Object System.IO.StringWriter($sb) 
$writer = New-Object System.Xml.XmlTextWriter($sw) 
$writer.Formatting = [System.Xml.Formatting]::Indented 
$doc.Save($writer) 
$writer.Close() 
$sw.Dispose() 

后来,通过调用StringBuilder对象的ToString方法,你可以看到下面的输出:

PS C:\> $sb.ToString() 
<?xml version="1.0" encoding="utf-16"?> 
<html>Value</html> 
+0

如果html标签有一个过渡文档类型,我遇到了这个问题。无法将html解析为有效的xml文档。 – Wade 2015-02-18 22:03:02

+0

尽管这种方法有效,但在PowerShell中使用集成的XML方法是一个更好的解决方案。 – Ryanman 2016-04-27 14:14:20

14

或者你可以使用CreateXmlDeclaration方法上XmlDocument例如:

$doc = new-object xml 
$decl = $doc.CreateXmlDeclaration("1.0", $null, $null) 
$rootNode = $doc.CreateElement("root"); 
$doc.InsertBefore($decl, $doc.DocumentElement) 
$doc.AppendChild($rootNode); 
$doc.Save("C:\temp\test.xml") 
+0

你也可以用$ doc.AppendChild添加$ decl – 2015-10-15 15:35:28

相关问题