Sco*_*ord 13 xml pretty-print xml-formatting
我正在寻找一个XSLT或命令行工具(或者可以作为命令行工具的C#代码等),用于执行XML漂亮打印的Windows.具体来说,我想要一个能够将属性一对一地放置的东西,例如:
<Node>
<ChildNode
value1='5'
value2='6'
value3='happy' />
</Node>
Run Code Online (Sandbox Code Playgroud)
它不一定非常像,但我想将它用于一个XML文件,该文件具有包含许多属性的节点,并将它们分布在多行中,使它们更易于阅读,编辑和文本差异.
注意:我认为我的首选解决方案是可以通过C#方法传递的XSLT表,尽管Windows命令行工具也很好.
Dam*_*ell 12
这是一个PowerShell脚本来完成它.它需要以下输入:
<?xml version="1.0" encoding="utf-8"?>
<Node>
<ChildNode value1="5" value2="6" value3="happy" />
</Node>
Run Code Online (Sandbox Code Playgroud)
...并将其作为输出产生:
<?xml version="1.0" encoding="utf-8"?>
<Node>
<ChildNode
value1="5"
value2="6"
value3="happy" />
</Node>
Run Code Online (Sandbox Code Playgroud)
干得好:
param(
[string] $inputFile = $(throw "Please enter an input file name"),
[string] $outputFile = $(throw "Please supply an output file name")
)
$data = [xml](Get-Content $inputFile)
$xws = new-object System.Xml.XmlWriterSettings
$xws.Indent = $true
$xws.IndentChars = " "
$xws.NewLineOnAttributes = $true
$data.Save([Xml.XmlWriter]::Create($outputFile, $xws))
Run Code Online (Sandbox Code Playgroud)
获取该脚本,将其另存为C:\ formatxml.ps1.然后,从PowerShell提示符键入以下内容:
C:\formatxml.ps1 C:\Path\To\UglyFile.xml C:\Path\To\NeatAndTidyFile.xml
Run Code Online (Sandbox Code Playgroud)
这个脚本基本上只是使用.NET框架,因此您可以非常轻松地将其迁移到C#应用程序中.
注意:如果之前未从PowerShell运行脚本,则必须在提升的PowerShell提示符下执行以下命令,然后才能执行脚本:
Run Code Online (Sandbox Code Playgroud)Set-ExecutionPolicy RemoteSigned
你只需要这样做一次.
我希望这对你有用.
Mar*_*ell 11
这是一个小的C#示例,可以直接由代码使用,也可以内置到exe中,并在命令行中调用为" myexe from.xml to.xml
":
using System.Xml;
static void Main(string[] args)
{
XmlWriterSettings settings = new XmlWriterSettings {
NewLineHandling = NewLineHandling.Entitize,
NewLineOnAttributes = true, Indent = true, IndentChars = " ",
NewLineChars = Environment.NewLine
};
using (XmlReader reader = XmlReader.Create(args[0]))
using (XmlWriter writer = XmlWriter.Create(args[1], settings)) {
writer.WriteNode(reader, false);
writer.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
样本输入:
<Node><ChildNode value1='5' value2='6' value3='happy' /></Node>
Run Code Online (Sandbox Code Playgroud)
示例输出(注意您可以删除<?xml ...
with settings.OmitXmlDeclaration
):
<?xml version="1.0" encoding="utf-8"?>
<Node>
<ChildNode
value1="5"
value2="6"
value3="happy" />
</Node>
Run Code Online (Sandbox Code Playgroud)
请注意,如果您想要一个字符串而不是写入文件,只需交换StringBuilder
:
StringBuilder sb = new StringBuilder();
using (XmlReader reader = XmlReader.Create(new StringReader(oldXml)))
using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
writer.WriteNode(reader, false);
writer.Close();
}
string newXml = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
在SourceForge上尝试整理一下。尽管它经常用在[X] HTML上,但是我之前已经在XML上成功使用过-只需确保使用该-xml
选项即可。
http://tidy.sourceforge.net/#docs
Tidy读取HTML,XHTML和XML文件并编写清理的标记。...对于一般XML文件,Tidy仅限于纠正基本格式错误和漂亮的打印。
人们已经移植到多个平台,并且可以作为可执行文件和可调用库使用。
Tidy有很多选择,包括:
http://api.html-tidy.org/tidy/quickref_5.0.0.html#indent
indent-attributes
页首类型:Boolean
默认值:no示例:y / n,yes / no,t / f,true / false,1/0
此选项指定Tidy是否应在新行上开始每个属性。
一个警告:
对XML的支持有限
符合W3C的XML 1.0建议的XML处理器对于将接受哪些文件非常挑剔。Tidy可以帮助您修复导致XML文件被拒绝的错误。Tidy尚未识别所有XML功能,例如,它不理解CDATA节或DTD子集。
但是我怀疑除非您的XML真正先进,否则该工具应该可以正常工作。
归档时间: |
|
查看次数: |
6419 次 |
最近记录: |