2012-01-16 68 views
0

XML我有這樣的XML:序列不包含任何元素同時分析使用LINQ

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <SampleResponse xmlns="http://tempuri.org/"> 
      <SampleResult> 
       <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" 
           xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
        <NewDataSet xmlns=""> 
         <Table diffgr:id="Table1" msdata:rowOrder="0"> 
          <tag1>tag1 text</tag1> 
          <tag2>tag2 text</tag2> 
         </Table> 
         <Table diffgr:id="Table2" msdata:rowOrder="1"> 
          <tag1>tag1 text</tag1> 
          <tag2>tag2 text</tag2> 
         </Table> 
        </NewDataSet> 
       </diffgr:diffgram> 
      </SampleResult> 
     </SampleResponse> 
    </soap:Body> 
</soap:Envelope> 

這裏我解析上述XML象下面這樣:

// My parser Class 
    class ParseClass 
    { 
     public string tag1 { get; set; } 
     public string tag2 { get; set; } 
    } 

我的解析代碼是:

string XMLresponse = e.response; 
    var XResult = XElement.Parse(XMLresponse); 
    var result = XResult.Descendants("Table").Select(t => new ParseClass 
       { 
        tag1 = t.Descendants("tag1").First().Value, 
        tag2 = t.Descendants("tag2").First().Value, 
       }); 
foreach (var res in result1) 
        { 
string str=res.tag1; 
str=res.tag2; 
        } 

如果所有的標籤都來了,我可以成功解析XML上面的內容。但有時候,我的響應XML缺少名爲tag2的標籤,那時我無法解析XML並給出例如「序列不包含任何元素」

這裏我的要求是: 我已經嘗試FirstOrDefault方法,而不是第一種方法,但沒有用。 如果XML中缺少任何標籤,那麼該變量應該爲該對象的空值(即:如果tag2丟失,則res.tag2應該爲空)。我怎樣才能做到這一點?

回答

2

而不是使用

tag1 = t.Descendants("tag1").First().Value 

使用

tag1 = (string) t.Descendants("tag1").FirstOrDefault() 

的(27:11 TAG2。)

FirstOrDefault()將返回null如果值不存在,而XElement到字符串轉換將在被要求轉換空引用時返回null,否則返回文本內容。

+0

完美答案Jon,感謝您的快速回復Jon。其實我想嘗試像(字符串)t.Descendants(「tag1」)。FirstOrDefault()。價值,但它不會工作。 – 2012-01-16 14:49:23

+0

@AvinashReddy:是的,那會失敗 - 因爲'.Value'屬性會在空引用上被調用。 – 2012-01-16 14:52:13

相關問題