关于XmlTextWriter的几个问题

3

我刚开始编辑XML,遇到了几个问题需要解决。

第一个问题:如何在每个writer.WriteEndElement();之后添加新行。我找到一些例子使用writer.WriteWhitespace("\n");,但似乎没有产生新的换行。

第二个问题:我想对我的代码进行缩进,使用writer.Formatting = Formatting.Indented;,但它似乎没有任何作用(很可能是因为我没有新行)。

第三个问题:由于我要将其附加到先前的文件中,因此我去掉了主父级的关闭标签,以便添加这个新数据。我希望只需使用writer.WriteEndElement();就可以关闭最终的标记,但由于我在写入时没有创建开放标记,因此它似乎没有意识到有一个开放标记。有没有好的方法来解决这个问题,或者我应该在文件末尾编写代码,以写入</closingTagName>

欢迎提出任何评论或建议。


1
首先,您绝不能留下开放标签孤儿...始终添加完整的元素,包括开放和关闭标签...如果您有一些未指定数量的元素,则只需为它们创建子元素并将它们添加到父元素中。 - Shekhar_Pro
我在开始写入之前将其删除,然后再次关闭它。 - Johnston
1个回答

2

试试这个:

using (var stringWriter = new StringWriter())
using (var writer = new XmlTextWriter(stringWriter))
{
    writer.WriteRaw("</closingTagName>");

    writer.Formatting = Formatting.Indented;
    writer.Indentation = 10;
    writer.WriteStartElement("Element1");

    writer.WriteStartElement("Element2");
    writer.WriteString("test");
    writer.WriteEndElement();

    writer.WriteEndElement();

    writer.WriteWhitespace(Environment.NewLine);

    writer.WriteStartElement("Element3");
    writer.WriteEndElement();

    var result = stringWriter.ToString();

结果:

</closingTagName>  -- Closing tag
<Element1>
          <Element2>test</Element2>  -- Line with the ident 10.
</Element1>
              -- extra new line
<Element3 />

1
@Johnston - 你说它没起作用是什么意思?我在贴到这里之前已经测试过这段代码,并且我也贴出了result字符串的输出。 - Alex Aza
1
@Johnston - 另外,我不建议同时使用缩进和换行,因为这会让写作者感到困惑。只使用缩进即可。 - Alex Aza
嗯,移除格式化代码似乎解决了问题...谢谢! - Johnston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接