2011-06-01 73 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

相關問題