我正在寻找一个xslt或命令行工具(或可以生成命令行工具的c代码,等等)用于windows,它可以很好地打印xml。具体来说,我想要一个能够把属性一对一地放在一行的人,比如:
<Node>
<ChildNode
value1='5'
value2='6'
value3='happy' />
</Node>
它不必完全像那样,但我想将它用于一个xml文件,该文件的节点具有数十个属性,并将它们跨多行分布,使它们更易于读取、编辑和文本区分。
注意:我认为我的首选解决方案是一个xslt工作表,我可以通过一个c方法,尽管windows命令行工具也很好。
最佳答案
下面是一个小的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();
}
}
样本输入:
<Node><ChildNode value1='5' value2='6' value3='happy' /></Node>
示例输出(注意,您可以用
<?xml ...
删除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();