繁体   English   中英

读取XML文件和缩进

[英]Reading XML file and indenting

我一直遇到XML文件缩进的问题。 每次我从某个服务器加载它们时,XML节点都会乱七八糟。 我想写一个快速的应用程序来正确缩进节点。 那是:

<name>Bob<name>
<age>24</age>
<address>
  <stnum>2</stnum>
  <street>herp derp st</street>
</address>

目前正在出现:

<name>bob</name><age>24</age>
<address>
      <stnum>2</stnum><street>herp derp st</street>
</address>

因为我无法触摸给我这些xml文件的内部程序并且在没有程序的情况下重新缩进它们需要很长时间,我想写一个快速程序来为我做这个。 当我使用XMLdocument库时,它只读取节点的信息。 所以我的问题是,有什么方法可以一行一行地读取文件,然后为我重新输入文件。 所有xml节点都是相同的。

谢谢。

您可以使用XmlTextWritter类。 更具体地说.Formatting = Formatting.Indented。

以下是我在此博客文章中找到的一些示例代码。 http://www.yetanotherchris.me/home/2009/9/9/formatting-xml-in-c.html

public static string FormatXml(string inputXml)
{
    XmlDocument document = new XmlDocument();
    document.Load(new StringReader(inputXml));

    StringBuilder builder = new StringBuilder();
    using (XmlTextWriter writer = new XmlTextWriter(new StringWriter(builder)))
    {
        writer.Formatting = Formatting.Indented;
        document.Save(writer);
    }

    return builder.ToString();
}

使用LINQ to XML,它基本上是一个单行:

public static string Reformat(string xml)
{
    return XDocument.Parse(xml).ToString();
}

您还可以使用XSLT:

  // This XSLT copies everything but idented

  StringReader sr = new StringReader( xsl );
  XmlReader reader = XmlReader.Create(sr);
  XslTransform xslt = new XslTransform();
  xslt.Load(reader);
  xslt.Transform(xmlFileUnidentedPath, xmlFileIdentedPath);

将xsl定义为:

string xsl = @"
<?xml version=""1.0""?>
<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
<xsl:output method=""xml"" omit-xml-declaration=""no"" indent=""yes"" encoding=""US-SCII""/>
<xsl:strip-space elements=""*""/>
<xsl:template match=""/"">
  <xsl:copy-of select="".""/>
</xsl:template>
</xsl:stylesheet>";

Visual Studio或任何体面的XML编辑器都可以轻松地格式化(列表)XML文档。 还有在线工具:

http://www.xmlformatter.net/

http://www.shell-tools.net/index.php?op=xml_format

如果您使用的是Visual Studio,只需打开xml,按Ctrl + Ctrl + k Ctrl + F即可进行格式化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM