2016-03-14 59 views
0
<library> 
    <book> 
     <id>1</id> 
     <name>abc</name> 
     <read> 
      <data>yes</data> 
      <num>20</num> 
     </read> 
    </book> 
    <book> 
     <id>20</id> 
     <name>xyz</name> 
     <read> 
      <data>yes</data> 
     </read> 
    </book> 
    <book> 
     <id>30</id> 
     <name>ddd</name> 
    </book> 
</library> 

從此我讀與元素<id><book>節點= 20存在使用下面的代碼如何檢查的元素在XML

XElement root = XElement.Load("e_test.xml") 
XElement book = root.Elements("book") 
        .Where(x => (int) x.Element("id") == 20) 
        .SingleOrDefault(); 
if (book == null) 
{ 
    // No book with that ID 
} 



if(book.Element("read").Element("num") != null) //check the node exist 
{ 
    int num = (int) book.Element("read").Element("num"); 
} 

在這裏,如果條件不能正常工作。它正在傳遞條件並進入並給出null異常。這是檢查相同的正確方法嗎?

我使用.NET Framework 4.0

+0

你已經說過你使用的是哪個版本的.NET,但不是你正在使用的C#版本。他們不是一回事。 –

+0

我只是用這個xml試過你的代碼,並沒有得到一個空引用異常。似乎有一些缺失。 – juharr

回答

2

您需要檢查null爲每個Elements電話:

if(book != null && book.Element("read") != null && book.Element("read").Element("num") != null) //check the node exist 

在C#6你可以用?.運營商,使其感覺更好:

if(book?.Element("read")?.Element("num") != null) //check the node exist 
+2

另一種方法是使用'Elements(「read」)。Elements(「num」)。FirstOrDefault()'。 –