【问题标题】:Formatting XML with tabulation and removing element ending space?使用制表格式格式化 XML 并删除元素结束空格?
【发布时间】:2010-11-16 03:26:10
【问题描述】:

我正在尝试做两件事:

  1. 获取格式为的输出 XML 用制表符代替空格。

  2. 删除它生成的结尾空格 用于视频元素。

    " />
    

    "/>
    

我尝试过使用

xmlWriter.Formatting = Formatting.Indented;

还有

IndentChar

但他们不为我工作不知道为什么。

这是我目前的代码,我也想听听意见和建议来改进它:

XmlDocument xmlDoc = new XmlDocument();

XmlTextWriter xmlWriter = new XmlTextWriter(filename, System.Text.Encoding.UTF8);
xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8' standalone='yes'");
xmlWriter.WriteComment(@" This file was made by @author");
xmlWriter.WriteStartElement("videos");
xmlWriter.Close();

xmlDoc.Load(filename);
XmlNode root = xmlDoc.DocumentElement;
foreach (int myID in ExportListIDs)
{
    XmlElement video = xmlDoc.CreateElement("video");
    root.AppendChild(video);
    video.SetAttribute("videoID", myID.ToString());
}

xmlDoc.Save(filename);

【问题讨论】:

  • XmlWriter 自 .NET 2.0 起已被弃用。请改用XmlWriter.Create。你为什么还要关心“格式化”呢?
  • 它也不适用于 XmlWriter.Create
  • 你到底为什么关心那个尾随空格?您将此输出提供给哪个不符合标准的 XML 处理器?
  • 喂给另一个我无法控制的程序,如果那里有空间,它就会中断......

标签: c# xml formatting


【解决方案1】:

我已经设法用下面的代码解决了问题 1,但我仍然不知道是否可以删除元素末尾的 "/> 之间的空格,参见问题 2。

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Encoding = Encoding.UTF8;
        settings.Indent = true;
        settings.IndentChars = "\t";

        XmlWriter writeXML = XmlWriter.Create("test.xml", settings);
        writeXML.WriteStartDocument();
        writeXML.WriteComment(@" This file was made by @author");

        writeXML.WriteStartElement("videos");

        foreach (var item in myList)
        {
            writeXML.WriteStartElement("video");
            writeXML.WriteAttributeString("ID", item.Key.ToString());
            writeXML.WriteAttributeString("Name", item.Value);
                writeXML.WriteStartElement("object");
                writeXML.WriteAttributeString("A", item.Key.ToString());
                writeXML.WriteAttributeString("B", item.Value);
                writeXML.WriteEndElement();
            writeXML.WriteEndElement();
        }

        writeXML.WriteEndElement();
        writeXML.WriteEndDocument();
        writeXML.Close();

【讨论】: