QA@IT
«回答へ戻る

回答を投稿

値(内容)の無い要素は「空要素」ですね。
(参考: 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) を使い分け/併用するとよろしいかと思います。

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

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

```csharp
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) を使い分け/併用するとよろしいかと思います。