【问题标题】:Hiding XElement nodes with no data隐藏没有数据的 XElement 节点
【发布时间】:2013-03-06 15:19:24
【问题描述】:

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

如果我有这个代码:

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 分支),所以我尝试使用三条件检查 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")
);

【问题讨论】:

  • 我认为这样做的唯一方法是不添加任何具有空值的 XElement...
  • 是的,不添加节点或添加空值应该会产生相同的结果。我宁愿不添加节点,因为我没有花时间调用方法。请记住,您也可以使用XElement.Add 添加子元素而不是构造函数。

标签: c# xml xsd xelement


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多