隐藏没有数据的XElement节点

时间:2013-03-06 15:19:24

标签: c# xml xsd xelement

我无法隐藏没有数据的XElements。

如果我有这段代码:

string missing = string.Empty;
XElement missingNodes = new XElement("TOPLEVEL",
    new XElement("FIELD1", "VALUE1"),
    new XElement("FIELD2", missing),
    new XElement("FIELD3", "VALUE3")
);

我最终构建了这个架构:

<TOPLEVEL>
  <FIELD1>VALUE1</FIELD1>
  <FIELD2></FIELD2>
  <FIELD3>VALUE3</FIELD3>
</TOPLEVEL>

如果我将缺少更改为null而不是String.Empty,则第二个字段变为:

<FIELD2 />

是否有一种简单的方法可以使用空/空数据隐藏节点?

我希望它看起来更像这样:

<TOPLEVEL>
  <FIELD1>VALUE1</FIELD1>
  <FIELD3>VALUE3</FIELD3>
</TOPLEVEL>

修改

按照@sine和@ gunr2171的建议,我走了不添加空/空节点的道路。

因为我想保留所有嵌套的新格式(没有很多if / then分支),我尝试使用triconditional检查null。有趣的是,如果您传递null作为任何内容,则XElement不会留下任何伪影。

所以这就是诀窍:

string missing = null;
XElement missingNodes = new XElement("TOPLEVEL",
    new XElement("FIELD1", "VALUE1"),
    (missing != null ) ? new XElement("FIELD2", missing) : null,
    new XElement("FIELD3", "VALUE3")
);

1 个答案:

答案 0 :(得分:1)

我相信@sine是对的。您只需检查值是否为空/空而不插入值。

public void AddIfValid(XElement root, string tagName, string value, string excludeValue)
{
    if (value != excludeValue)
        root.Add(new XElement(tagName, value);
}