2010-03-15 3 views
3

Я добавляю элемент в существующий XML-документ со следующим кодом:VB.NET добавить элемент документа XML с помощью LINQ к 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

Да, спасибо. –

0

Вы определяете nodeElement, но не создаете его, прежде чем вы вызовете его методы.

0

Вам нужно создать экземпляр первой:

Dim nodeElement As New XElement 
+0

Это не будет делать то, что он хочет. – SLaks

0

"Dim nodeElement Как Новый XElement"

На самом деле новые не допустимый метод для XElements. Даже если он пройдет отладку (что я сомневаюсь в этом), это приведет к необработанной перегрузке

Как сказал Слэкс, вы можете открыть существующий файл - (я считаю, что файл, вероятно, существует, как вы сказали в сообщении).

Вы можете использовать

document.Root.Add(attrAndValue) 

или

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

nodeElement.Add(attrAndValue) 

следуют

document.Save(theXMLSource) 

оба работают одинаково. так как вы используете литералы, я думал, что вам может понадобиться знать «второй способ». Это полезно в основном потому, что вы можете перейти туда, где хотите вставить элемент.

, например

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

или

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

надеюсь, что это помогает

Смежные вопросы