0
private void alterNodeValue(string xmlFile, string parent, string node, string newVal) 
{ 
    XDocument xml = XDocument.Load(this.dir + xmlFile); 

    if (xml.Element(parent).Element(node).Value != null) 
    { 
     xml.Element(parent).Element(node).Value = newVal; 
    } 
    else 
    { 
     xml.Element(parent).Add(new XElement(node, newVal)); 
    } 

    xml.Save(dir + xmlFile); 
} 

爲什麼這擲爲什麼會拋出NullReferenceException?

System.NullReferenceException是由用戶代碼

未處理的在這條線

if (xml.Element(parent).Element(node).Value != null) 

我猜這是因爲XML節點不存在,但這就是!= null應該檢查的內容。我如何解決這個問題?

我試過幾件事情,它們都在非空檢查期間的某個時刻拋出相同的異常。

感謝您的任何幫助。

回答

7

xml.Element(parent)Element(node)您嘗試訪問xml.Element(parent)的返回值是null

重組喜歡這將使你看到它是一個:

var myElement = xml.Element(parent); 
if (xmyElement != null) 
{ 
    var myNode = myElement.Element(node); 
    if(myNode != null) 
    { 
     myNode.Value = newVal; 
    } 
} 

更新:

從您的評論看起來你想這樣做:

if (xml.Element(parent).Element(node) != null) // <--- No .Value 
{ 
    xml.Element(parent).Element(node).Value = newVal; 
} 
else 
{ 
    xml.Element(parent).Add(new XElement(node, newVal)); 
} 
+0

存在父節點沒有。我試圖抓住'Element(node)== null'並通過'else'語句添加它。 – PiZzL3 2011-03-27 19:15:47

+1

@ PiZzL3 - 如果你知道它不存在,你爲什麼在_non existent_節點上做'.Value'? – Oded 2011-03-27 19:17:58

+0

我仍然在學習如何正確使用'XDocument'。我不知道所有的細節。 – PiZzL3 2011-03-27 19:19:54

1

這幾乎肯定是因爲這返回null:

xml.Element(parent) 
1

您需要檢查:

Element(node) != null 

在打電話前.value的。如果Element(node)== null,那麼對.Value的調用將拋出一個空引用異常。

1

嘗試改變if語句來這是你的:

if (xml.Element(parent).Element(node) != null) 

如果父元素的節點爲空,則無法訪問空對象中的一員。

1

至少:

private void alterNodeValue(string xmlFile, string parent, string node, string newVal) 
{ 
    XDocument xml = XDocument.Load(this.dir + xmlFile); 
    XElement parent = xml.Element(parent).Element(node); 
    if (parent != null) 
    { 
     parent.Value = newVal; 
    } 
    else 
    { 
     xml.Element(parent).Add(new XElement(node, newVal)); 
    }  
    xml.Save(dir + xmlFile); 
} 

更好:

private void alterNodeValue(string xmlFile, string parent, string node, string newVal) 
{ 
    string path = System.IO.Path.Combine(dir, xmlFile); 
    XDocument xml = XDocument.Load(path); 
    XElement parent = xml.Element(parent).Element(node); 
    if (parent != null) 
    { 
     XElement node = parent.Element(parent); 
     if (node != null) 
     { 
      node.Value = newVal; 
     } 
     else 
     { 
      // no node 
     } 
    } 
    else 
    { 
     // no parent 
    }  
    xml.Save(path); 
} 
0
 if (xml.Element(parent) != null) 
     { 
      var myNode = xml.Element(parent).Element(node); 
      if (node != null) 
       myNode.Value = newVal; 
     } 
     else 
     { 
      xml.Element(parent).Add(new XElement(node, newVal)); 
     } 
相關問題