如何使用 XmlTextWriter 使 XML 个元素自关闭
How to make XML elements self closing with XmlTextWriter
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”用于“添加测试”元素,但这最终只是将“添加测试”元素格式化为播放列表的开始元素,所以它只是一大行。
你没有自闭元素的原因是你将“xxx”作为元素内部的值传递。同样在您的示例中,元素名称包含一个 space,这些给人的印象是您越来越接近最终结果。相反,您必须表示开始编写新元素“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();
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”用于“添加测试”元素,但这最终只是将“添加测试”元素格式化为播放列表的开始元素,所以它只是一大行。
你没有自闭元素的原因是你将“xxx”作为元素内部的值传递。同样在您的示例中,元素名称包含一个 space,这些给人的印象是您越来越接近最终结果。相反,您必须表示开始编写新元素“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();