QA@IT

【C#】xmlの値があるのとないの

5764 PV

このように値を持っているものと
<address ID="0">東京都</address>
持っていないノード
<address ID="0" />
は何か違う言い方があるのでしょうか?

また、値を持っているか持っていないかをboolで判定できますでしょうか?
よろしくお願いいたします。

回答

値(内容)の無い要素は「空要素」ですね。
(参考: http://www.atmarkit.co.jp/aig/01xml/element.html)

空要素かどうかの判定は、LINQ to XML であれば XElement の IsEmpty プロパティでできそう… と思ったのですが、

var doc = XDocument.Parse(@"<?xml version=""1.0""?>
    <addresses>
    <address ID=""0"">東京都</address>
    <address ID=""1""></address>
    <address ID=""2""/>
    </addresses>");

foreach (var address in doc.Descendants("address"))
{
    Console.WriteLine(address.Attribute("ID"));
    Console.WriteLine(" IsEmpty: " + address.IsEmpty);
    Console.WriteLine(" String.IsNullOrEmpty: " + String.IsNullOrEmpty(address.Value));
}

実行結果

ID="0"
 IsEmpty: False
 String.IsNullOrEmpty: False
ID="1"
 IsEmpty: False
 String.IsNullOrEmpty: True
ID="2"
 IsEmpty: True
 String.IsNullOrEmpty: True

<tag></tag> のケースは IsEmpty == false なんですね…

必要に応じて IsEmpty と String.IsNullOrEmpty(address.Value) を使い分け/併用するとよろしいかと思います。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。