0

次のような XML ドキュメント (Microsoft の Project XML) があります。

<Columns>
  <Column>
    <Name>A</Name>
    <Width>100</Width>
  </Column>
</Columns>
<Columns>
  <Column>
    <Name>B</Name>
    <Width>200</Width>
  </Column>
</Columns>
<Columns>
 <Column>
   <Name>C</Name>
 </Column>
</Columns>

名前と幅のテキストを取得しようとしています:

var man = new XmlNamespaceManager(xdoc.NameTable);
man.AddNamespace("ns", "http://schemas.microsoft.com/project");

XmlNodeList xnList = xdoc.SelectNodes("/ns:Columns/ns:Column", man);

foreach (XmlNode xn in nodeList[i])
        {
            string name = xn["Name"].InnerText);
            string width = xn["Width"].InnerText);
        }

XML にこれらの「Name」ノードと「Width」ノードがあれば問題ありません。ただし、上記のサンプルの最後の例のように、「Width」ノードがない場合もあります。だから私はエラーを取ります。どうすればこれを回避できますか。「空の」文字列として取得したい。どのようにできるのか?

4

1 に答える 1

2

null かどうかを確認できます。

string name;
if (xn["Name"] == null) 
{
    // Node doesn't exists
    name = string.Empty;
}
else
{
    name = xn["Name"].InnerText;
}  

または、1 つのライナーだけで実行できます。

string name = xn["Name"] == null ? string.Emtpy : xn["Name"].InnerText;

または、C# 6 を使用している場合:

string name =  xn["Name"]?.InnerText;

その名前のノードがない場合、インデックス プロパティは null を返します。

于 2015-11-17T12:58:47.533 に答える