从PowerShell保存格式良好的XML

9

我像这样创建一个XmlDocument:

$doc = New-Object xml

然后,在添加节点后,我将其保存:
$doc.Save($fileName)

问题在于它没有将XML声明添加到文档开头,导致文档格式不正确。换句话说,它只保存了一个片段。我该如何为其添加正确的XML声明?


3
请注意,缺少XML声明不会使XML文件成为格式不正确的文件,因为它不是必需元素。 - Keith Hill
2个回答

16

或者您可以使用XmlDocument上的CreateXmlDeclaration方法,例如:

$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")

1
你也可以使用 $decl 和 $doc.AppendChild 一起添加。 - Balint Bako

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()

稍后,通过调用ToString方法在StringBuilder对象上,您可以看到以下输出:

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

我遇到了一个问题,如果HTML标签具有过渡的文档类型,则无法将HTML解析为有效的XML文档。 - Newclique
虽然这种方法可行,但在PowerShell中使用集成的XML方法是更好的解决方案。 - Ryanman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接