PowerShell - 使用LoadXml

时间:2015-11-27 13:02:24

标签: xml powershell

我正在编写一个脚本,其主要目的是在目标计算机上本地查询一系列XML文件,如果发现它们因任何原因被破坏或丢失,则重新创建它们。 / p>

我遇到的问题是FileZilla Server应用程序使用的特定XML文件没有XML声明,并且没有缩进节点。由于这些值是静态的,我只是创建了一个System.Xml.XmlDocument变量并将数据复制到一个工作的XML文件中并将其粘贴到.LoadXml()函数的参数括号中而不缩进,就像这样;

$xmlFileZillaServer= New-Object System.Xml.XmlDocument
    $xmlFileZillaServer.LoadXml('
<FileZillaServer>
<Settings>
<Item name="Serverport" type="numeric">21</Item>
<Item name="Number of Threads" type="numeric">2</Item>
<Item name="Maximum user count" type="numeric">0</Item>
<Item name="Timeout" type="numeric">120</Item>
<Item name="No Transfer Timeout" type="numeric">120</Item>
                     etcetera...

但是,XML的输出是缩进的,如下所示;

<FileZillaServer>
  <Settings>
    <Item name="Serverport" type="numeric">21</Item>
    <Item name="Number of Threads" type="numeric">2</Item>
    <Item name="Maximum user count" type="numeric">0</Item>
    <Item name="Timeout" type="numeric">120</Item>
    <Item name="No Transfer Timeout" type="numeric">120</Item>
                     etcetera...

如何阻止LoadXml自动缩进此缩进?或者我是否必须使用XmlTextWriter对象手动编写XML并在写入过程中指定缩进配置?

2 个答案:

答案 0 :(得分:1)

  

或者我是否必须使用XmlTextWriter对象手动编写XML并在写入过程中指定缩进配置?

是,或者更确切地说,是一个带有自定义XmlWriter对象的XmlWriterSettings类:

# Create a new settings object and configure settings
$XmlWriterSettings = New-Object System.Xml.XmlWriterSettings
$XmlWriterSettings.Indent = $false
$XmlWriterSettings.OmitXmlDeclaration = $true

# Create a new writer with the settings above
$XmlWriter = [System.Xml.XmlTextWriter]::Create("C:\output.xml",$XmlWriterSettings)

# Use the writer to save the document
$XmlFileZillaServer.Save($XmlWriter)

答案 1 :(得分:0)

我通过组合试错并浏览其他StackOverflow线程找到了这个问题的答案。基本上,当我将Indent属性设置为$false时,XML文档会在一条长行上写入。

在C#线程中查看了XmlTextWriter类的this线程后,您需要将Indent设置为$true,然后设置{{1}值为零(IndentChars) - 请参阅下面的方法:

''