我正在编写一个脚本,其主要目的是在目标计算机上本地查询一系列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并在写入过程中指定缩进配置?
答案 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
) - 请参阅下面的方法:
''