如何使用 XmlTextWriter 使 XML 元素自动关闭

Posted

技术标签:

【中文标题】如何使用 XmlTextWriter 使 XML 元素自动关闭【英文标题】:How to make XML elements self closing with XmlTextWriter 【发布时间】:2021-07-11 23:57:29 【问题描述】:
        var fileName = @"C:\Users\MrHer\source\repos\PlaylistGen-main\TestPlaylistGenerator\TestPlaylistGenerator\TestPlaylistGenerator\bin\Debug\netcoreapp3.1\FailedTests.Playlist";
        XmlTextWriter xmlWriter = new XmlTextWriter(fileName, System.Text.Encoding.UTF8);
        xmlWriter.Formatting = System.Xml.Formatting.Indented;
        xmlWriter.WriteStartElement("Playlist");
        xmlWriter.WriteAttributeString("Version", "1.0");

        foreach (var test in failedTestNames)
        
            xmlWriter.WriteElementString("Add Test", test);
        

        xmlWriter.WriteEndElement();
        xmlWriter.Flush();
        xmlWriter.Close();

这是我当前用于生成我正在寻找的文件的代码,当前输出如下所示 -

<Playlist Version="1.0">
  <Add Test>xxxxxxxxxxxxxxxxxxx</Add Test>
  <Add Test>xxxxxxxxxxxxxxxxxxx</Add Test>
</Playlist>

我需要知道如何将“添加测试”元素设置为自闭合标签,使其看起来像 -

<Playlist Version="1.0">
  <Add Test="xxxxxxxxxxxxxxxxxxx" />
  <Add Test="xxxxxxxxxxxxxxxxxxx" />
</Playlist>

编辑:

我尝试将“WriteAttributeString”用于“添加测试”元素,但这最终只是将“添加测试”元素格式化为播放列表的开始元素,因此它只是一条大线。

【问题讨论】:

XML 规范说封闭标签名称是可选的。如果您的 xml 无效,则在关闭编写器时会出现异常。标签名称“添加测试”中的空格无效 【参考方案1】:

没有自闭合元素的原因是因为你将“xxx”作为 value 传递给内部元素。同样在您的示例中,元素名称包含一个空格,这些给人的印象是您越来越接近最终结果。相反,您必须表示开始编写新元素“Add”,添加一个名为“test”的属性,然后关闭一个标签。 Writer 将决定在没有文本的情况下关闭它(即使没有空文本),因为没有给节点赋值,也没有尝试写入完整的结尾。

Console.OutputEncoding = Encoding.UTF8;
using var xmlWriter = new XmlTextWriter(Console.OpenStandardOutput(), Encoding.UTF8);
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.WriteStartElement("Playlist");
xmlWriter.WriteAttributeString("Version", "1.0");

foreach (var test in new[] "abc", "def")

    xmlWriter.WriteStartElement("Add");
    xmlWriter.WriteAttributeString("Test", test);
    xmlWriter.WriteEndElement();


xmlWriter.WriteEndElement();

【讨论】:

以上是关于如何使用 XmlTextWriter 使 XML 元素自动关闭的主要内容,如果未能解决你的问题,请参考以下文章

C#中XmlTextWriter读写xml文件详细介绍

使用 StringWriter、StringBuilder 和 XmlTextWriter 加载 XML 并将其写入字符串

在 .NET 中,如何将 XmlElement 写入 XmlTextWriter,其中元素可能有子元素

如何在 C# 中使用 XmlDocument 和 XmlNode 修改现有 XML 文件

MemoryStream、XmlTextWriter 和警告 4 CA2202:Microsoft.Usage

如何从数据库表中生成xml文件?