2014-10-21 1 views
-2

Я использую Linq для XML, чтобы добавить XElement в свой файл. В найденном этом решении Adding XElement to XML file using Linq to XML и я делаю это подобное.Добавление XElement в файл XML

МОЯ XML

<?xml version="1.0" encoding="utf-8"?> 
<Kostenstellen> 
    <Kostenstelle id="111002"> 
    <Kennung>SK_5232</Kennung> 
    <Kennung>HS_2322</Kennung> 
    <Kennung>SK_5232</Kennung> 
    </Kostenstelle> 
    <Kostenstelle id="111004"> 
    <Kennung>SK_5232</Kennung> 
    </Kostenstelle> 
    <Kostenstelle id="123123"> 
    <Kennung>SK_2312</Kennung> 
    </Kostenstelle> 
</Kostenstellen> 

C#

string kostenstelle = "1111111"; 
var costXML = XElement.Load(Settings1.Default.XMLPath); 
var newChild = new XElement("Kostenstelle", new XAttribute("id", kostenstelle)); 
       costXML.Add(newChild); 
       costXML.Save(Settings1.Default.XMLPath); 

Результат XML должен быть

<?xml version="1.0" encoding="utf-8"?> 
<Kostenstellen> 
    <Kostenstelle id="111002"> 
    <Kennung>SK_2222</Kennung> 
    <Kennung>HS_2222</Kennung> 
    <Kennung>SK_2222</Kennung> 
    </Kostenstelle> 
    <Kostenstelle id="111004"> 
    <Kennung>SK_2222</Kennung> 
    </Kostenstelle> 
    <Kostenstelle id="123123"> 
    <Kennung>SK_2222</Kennung> 
    </Kostenstelle> 
    <Kostenstelle id="111111"> 
    </Kostenstelle> 
    </Kostenstellen> 

Но, к сожалению, она не будет работать какие-нибудь идеи?

Спасибо за Ваш ответ

Kai

Update: Моя проблема в том, что процесс добавления работает отлично. Но когда я хочу сохранить изменения, ничего не происходит. не выдает исключения.

costXML.Save(Settings1.Default.XMLPath); 
+0

Пока вы объяснили, что вы пытаетесь сделать и как, вы не объяснили, в чем проблема вашего переживания. Например, вы получаете исключение при запуске кода? Или результат просто не то, что вы ожидаете? Пожалуйста, уточните свой вопрос с дополнительной информацией. – Adrian

+0

Отсутствует декларация 'costXML', здесь здесь очень важно. Не могли бы вы добавить это в свой пример кода? –

+0

Он выкинет исключение, если что-то не так ... куда идет ваш путь? – Tyress

ответ

0

Похоже, вы пытаетесь добавить второй корневой элемент, который недопустим, так как он недопустим. Вам нужно добавить новый элемент в <Kostenstellen> элемент, используя что-то вроде:

costXML.Descendants("Kostenstellen").First().Add(newChild); 
+0

Hey Bossink, сначала спасибо за повтор. Я пробовал вашу душу, но costXML.Descendants («Kostenstellen») содержит null при выполнении. –

0

Вы уверены, что ваш процесса добавления работают нормально? Ваш XElement.Load(Settings1.Default.XMLPath); ничего не делает. Основываясь на том, что вы сейчас делаете с этим кодом, это означает, что вы перезаписываете свой старый XML-файл с помощью одноэлементного XML.

Update:

Я попытался запустить свой код, линия за линией, используя свой первоначальный XML и только заменив переменную Path настроек1 сослаться на этот XML. Это был мой результат:

<?xml version="1.0" encoding="utf-8"?> 
<Kostenstellen> 
    <Kostenstelle id="111002"> 
    <Kennung>SK_5232</Kennung> 
    <Kennung>HS_2322</Kennung> 
    <Kennung>SK_5232</Kennung> 
    </Kostenstelle> 
    <Kostenstelle id="111004"> 
    <Kennung>SK_5232</Kennung> 
    </Kostenstelle> 
    <Kostenstelle id="123123"> 
    <Kennung>SK_2312</Kennung> 
    </Kostenstelle> 
    <Kostenstelle id="1111111" /> 
</Kostenstellen> 

Так технически это должно сработать. Уверен, что он выкинет ошибку, но вы ничего не поймете, и проигнорируете ее на уловке, когда должна быть проблема с сохранением или что-то в этом роде. Я не могу себе представить.

+0

Hi Tyress, спасибо за повтор. Я забыл добавить delcaration costxml в сообщение (исправлено). В файле Costxml содержится весь XML-файл. Я могу выбрать данные из costxml, но при попытке добавить XElement ничего не происходит. –

+0

Привет, кай, оцените обновление. Я попытался запустить ваш код, как в своем ответе, и он работает для меня. – Tyress

+1

Спасибо за отзыв, наконец, я (догадался) нашел ошибку. Я загружаю файл в свой глобальный класс во время запуска. Как что общественного статический класс Global { частный статический XElement costXML { получить { возврата XElement.Load (Settings1.Default.XMLPath); } } Итак, моя презумпция заключается в том, что xml-файл просто не обновлялся во время выполнения. Даже с помощью метода Save() ... –