VB.NET добавляет элемент в документ XML с помощью LINQ to XML - PullRequest
3 голосов
/ 15 марта 2010

Я добавляю элемент в существующий документ 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 ]

4 голосов
/ 15 марта 2010

Вам нужно загрузить существующий файл, например так:

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

...

document.Root.Add(attrAndValue)
document.Save(theXMLSource)
0 голосов
/ 17 марта 2010

"Dim nodeElement As New XElement"

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

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

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

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)

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

0 голосов
/ 15 марта 2010

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

Dim nodeElement As New XElement 
0 голосов
/ 15 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...