我们可以强制XmlWriter发出<my-tag> </ my-tag>而不是<my-tag />吗?

mjv*_*mjv 23 .net xml xmlwriter

默认情况下,

someXmlWriter.WriteElementString("my-tag", someString);
Run Code Online (Sandbox Code Playgroud)

产生 <my-tag />

我查看了XmlWriterSettings类,以寻找可能强制编写器生成<my-tag></my-tag>但可能没有找到任何内容的可能选项.

是否有一种简单的方法可以强制XmlWriter使用"open tag,close tag"而不是使用简写形式发布空元素?

编辑:
是的!我意识到关于XML有效性,这两个符号是等价的,有效的,所有......我正在使用遗留代码,使用Read()解析这样的XML,即在节点级别(!)并通过Read来解决问题() - 在空节点上时...

因此,我的问题来自限制此遗留代码的更改量.这个问题确实与建议的SO问题重叠; 然而,这里提供的选项都不适用于我的情况.

mej*_*ggs 20

这对我有用:

writer.WriteStartElement("my-tag");
writer.WriteRaw(someString);
writer.WriteFullEndElement();
Run Code Online (Sandbox Code Playgroud)

WriteEndElement仍然自动关闭标签

  • 在我的测试中,如果我执行 writer.WriteRaw(""),然后执行 writer.WriteEndElement(),我的标签不会自行关闭。VS 2010。 (2认同)

DwB*_*DwB 1

你有没有尝试过这样的事情:

if (someString.Length > 0)
{
  someXmlWriter.WriteElementString("my-tag", someString);
}
else
{
  someXmlWriter.WriteStartElement("my-tag");
  someXmlWriter.WriteEndElement("my-tag");
}
Run Code Online (Sandbox Code Playgroud)

也许用它作为成员函数创建一个实用程序类。