2

データのない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>

行方不明をString.Emptyではなくnullに変更すると、2番目のフィールドは次のようになります。

<FIELD2 />

空/ヌルデータでノードを非表示にする簡単な方法はありますか?

私はそれをもっとこのように見せたいです:

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

編集:

@sineと@gunr2171のアドバイスに従って、私は空/ヌルノードを追加しないという道を歩みました。

すべてをネストされた新しい形式で(多くのif / thenブランチなしで)保持したかったので、nullの3条件チェックを使用してみました。興味深いことに、何かの内容として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")
);
4

1 に答える 1

2

@sineは正しいと思います。値がnull/空であるかどうかを確認するだけで、値を挿入しないでください。

public void AddIfValid(XElement root, string tagName, string value, string excludeValue)
{
    if (value != excludeValue)
        root.Add(new XElement(tagName, value);
}
于 2013-03-06T15:27:07.177 に答える