1
を解析中に、私は取り扱いノード私はXDocument解析を使用していますので、XMLからアカウントIDの値が「GT」を取得したい
<lab:lab uri="https://bh03.org/api/lb/3" xmlns:udf="http://ge.com/ri/userdefined" xmlns:ri="http://ge.com/ri" xmlns:lab="http://ge.com/ri/lab">
<name>GTech</name>
<udf:field type="String" name="Account ID">gt</udf:field>
</lab:lab>
以下のように見えるAPIのXMLレスポンスを持って存在し、以下のコードを使用すると、
XDocument new_doc = XDocument.Parse(responseString_LabURL);
XNamespace ns = "http://ge.com/ri/userdefined";
string accountID = new_doc.Descendants(ns + "field").FirstOrDefault(field => field.Attribute("name").Value.Equals("Account ID")).Value;
しかし、時にはそこにXMLには<udf:field type="String" name="Account ID">gt</udf:field>
できなくなりますと、以下の
<lab:lab uri="https://bh03.org/api/v2/labs/1302" xmlns:udf="http://ge.com/ri/userdefined" xmlns:ri="http://ge.com/ri" xmlns:lab="http://ge.com/ri/lab">
<name>lsd</name>
</lab:lab>
のようになります。
フィールドがない場合の処理方法。
つの提案1)型を使用するvarとして「文字列」を使用しないでください文字列がNULL値を好きではない2)ドン。 nullのときにエラーを返す値を使用する代わりに、これを試してみてください:string accountID = new_doc.Descendants(ns + "field")ここで(field => field.Attribute( "name")!= null).Select(x =>(文字列)field.Attribute( "name"))FirstOrDefault(); – jdweng