2010-03-15 95 views
3

我加入的元素現有的XML文檔用下面的代碼:VB.NET的元素與LINQ添加到XML文檔的XML

 Dim theXMLSource As String = Server.MapPath("~/Demo/") & "LabDemo.xml" 
    Dim nodeElement As XElement 

    Dim attrAndValue As XElement = _ 
     <LabService> 
      <ServiceType> 
       <%= txtServiceType.Text.Trim %> 
      </ServiceType> 
      <Level> 
       <%= txtLevel.Text.Trim %> 
      </Level> 
     </LabService> 

    nodeElement.Add(New XElement(attrAndValue)) 
    nodeElement.Save(theXMLSource) 

它使錯誤是這樣的:

System.NullReferenceException: Object reference not set to an instance of an object. 

Object reference not set to an instance of an object. 

Error line: nodeElement.Add(New XElement(attrAndValue)) 

我調試它,但我還沒有得到錯誤。你能證明問題是什麼嗎?謝謝

回答

4

您需要加載現有的文件,像這樣:

Dim theXMLSource As String = Server.MapPath("~/Demo/LabDemo.xml") 
Dim document As XDocument = XDocument.Load(theXMLSource) 

... 

document.Root.Add(attrAndValue) 
document.Save(theXMLSource) 
+0

是的,謝謝。 – 2010-03-15 13:58:00

0

您定義了nodeElement,但是在調用它的方法之前不要實例化它。

0

您需要實例第一:

Dim nodeElement As New XElement 
+0

這不會做他想做的。 – SLaks 2010-03-15 13:41:55

0

「昏暗nodeElement作爲新的XElement」

其實新不一個有效的XElements方法。即使它通過調試(我懷疑它)它會導致未處理的超載像SLaks說,你可以打開現有的文件 - (我認爲該文件可能存在就像你在帖子中說的)。

您可以使用後跟

document.Save(theXMLSource) 

document.Root.Add(attrAndValue) 

Dim nodeElement As XElement = document.<theXMLroot>(0) 

nodeElement.Add(attrAndValue) 

兩個相同的方式工作。既然你使用的是文字,我想你可能想知道「第二種方式」這很有用,主要是因爲你可以改變到你想插入元素的位置。

例如

Dim nodeElement As XElement = document.<theXMLroot>.<parent>(0) 

Dim nodeElement As XElement = document...<parent>(0) 

希望它有助於