首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果InnerText为null,则将XML元素写入< element />而不是<element></element>

如果InnerText为null,则将XML元素写入< element />而不是<element></element>
EN

Stack Overflow用户
提问于 2015-06-18 09:04:29
回答 4查看 1K关注 0票数 3

我正在编写一个c#类,以编写一个需要与我们使用的现有XML结构完全匹配的XML文件,这样一些遗留系统就不会混淆。

当元素的InnerText值为空时,我需要xml元素的元素标记如下

代码语言:javascript
复制
<element/>

而不是

代码语言:javascript
复制
<element></element>

我早些时候偶然地做到了,但没有再重复一遍。下面是我用来编写xml文件的方法的示例:

代码语言:javascript
复制
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);
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-18 09:22:59

在每次调用InnerText的set属性访问器时,似乎都会出现一个InnerText。此代码段适用于新的XmlElements:

代码语言:javascript
复制
if(text != null) {
    myNode.InnerText = text;
}
票数 4
EN

Stack Overflow用户

发布于 2015-06-18 09:59:25

正如@Binkan所说,没有必要显式设置IsEmpty,而是默认情况下为true。当您不需要InnerText时,不要设置它。如果在许多地方需要这种行为,可以编写简单的扩展方法:

代码语言:javascript
复制
public static class XmlUtils
{
    public static void SetInnerText(this XmlElement xmlElement, string text)
    {
        if(text != null)
            xmlElement.InnerText = text;
    }
}

像这样使用它:

代码语言:javascript
复制
// text can be null here, element will still looks like <level2 />
XE_level2.SetInnerText(text); 
票数 3
EN

Stack Overflow用户

发布于 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,则移除元素的子元素,并以短标记格式序列化元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30910978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档