我正在搜索一个XSLT或命令行工具(或C#代码,可以制成一个命令行工具等),Windows将进行XML漂亮打印.具体来说,我想要一个有能力将属性放在一行的能力,如:
<Node> <ChildNode value1='5' value2='6' value3='happy' /> </Node>
它不一定是这样的,但是我想将它用于具有数十个属性的节点的XML文件,并将它们扩展到多行,使得它们更容易阅读,编辑和文本差异.
这是一个小的C#示例,可以直接由您的代码使用,或内置到一个exe中,并在comand行中调用“my.xml from.xml to.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(); } }
样品输入:
<Node><ChildNode value1='5' value2='6' value3='happy' /></Node>
示例输出(请注意,您可以删除<?xml ... with settings.OmitXmlDeclaration):
<?xml version="1.0" encoding="utf-8"?> <Node> <ChildNode value1="5" value2="6" value3="happy" /> </Node>
请注意,如果您想要一个字符串而不是写入一个文件,只需与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();