我正在编写一个c#类,以编写一个需要与我们使用的现有XML结构完全匹配的XML文件,这样一些遗留系统就不会混淆。
当元素的InnerText值为空时,我需要xml元素的元素标记如下
<element/>而不是
<element></element>我早些时候偶然地做到了,但没有再重复一遍。下面是我用来编写xml文件的方法的示例:
public bool WriteXML(string path)
{
// Create the xml document in memory inc. xml declaration
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
// Create the root element
doc.AppendChild(dec);
XmlElement rootNode = doc.CreateElement("root");
doc.AppendChild(rootNode);
// Create elements at root node
XmlElement XE_level1 = doc.CreateElement("level1");
XE_level1.InnerText = "Text";
rootNode.AppendChild(XE_level1);
// Create a user data element
XmlElement XE_level2 = doc.CreateElement("level2");
XE_level2.InnerText = "Text";
XE_level1.AppendChild(XE_level2);
doc.Save(path);
}发布于 2015-06-18 09:22:59
在每次调用InnerText的set属性访问器时,似乎都会出现一个InnerText。此代码段适用于新的XmlElements:
if(text != null) {
myNode.InnerText = text;
}发布于 2015-06-18 09:59:25
正如@Binkan所说,没有必要显式设置IsEmpty,而是默认情况下为true。当您不需要InnerText时,不要设置它。如果在许多地方需要这种行为,可以编写简单的扩展方法:
public static class XmlUtils
{
public static void SetInnerText(this XmlElement xmlElement, string text)
{
if(text != null)
xmlElement.InnerText = text;
}
}像这样使用它:
// text can be null here, element will still looks like <level2 />
XE_level2.SetInnerText(text); 发布于 2015-06-18 09:26:41
你想要的似乎是XmlElement.IsEmpty (https://msdn.microsoft.com/en-us/library/system.xml.xmlelement.isempty(v=vs.110).aspx )
医生说:
如果要以短标记格式“
<item/>”序列化元素,则返回true;对于长格式"<item></item>“返回false。 当设置此属性时,如果设置为true,则移除元素的子元素,并以短标记格式序列化元素。
https://stackoverflow.com/questions/30910978
复制相似问题