2015-02-13 7 views
-1

У меня есть XmlDocument, который не имеет. узлов «Приложения». Теперь я хочу писать только узлы «Приложения» в XML-файле. Я пробовал этот usin XDocument и его работу, как показано ниже, но как я могу сделать то же самое с помощью XmlDocument.Как написать конкретные узлы XmlDocument в XML-файле

StringBuilder sb = new StringBuilder(); doc.Root.Elements("Application").ToList().ForEach(x => sb.Append(x.ToString())); string xmlNodes = sb.ToString(); File.WriteAllText("file", xmlNodes);

+0

Фактически, я работаю над существующим приложением, и он использует XmlDocument, и я не хочу изменять существующий код. Поэтому я не могу использовать XDocument. Вот почему я прошу использовать такой же код с помощью объекта XmlDocument. Я хочу, чтобы код использовал linq или через цикл foreach, если возможно –

ответ

0

Я бы посоветовал против смешивания XmlDocuments и XDocuments, как они два различных подхода к управлению XML DOM, которые не особенно легко компоновать вместе.

Если вы хотите использовать Lynx для XML, а кто бы не хотел;), я бы рекомендовал сосредоточиться на типах X____; XDocument, XElement и т.д.

С этой целью вы можете вручную построить граф объектов, или, если вы предпочитаете, вы можете создать XDocument из исходного XML:

var xml = @"<?xml version='1.0'?> 
<Applications> 
    <Application id='1'> 
     <Name>App1</Name> 
    </Application> 
    <Application id='2'> 
     <Name>App2</Name> 
    </Application> 
    <Application id='3'> 
     <Name>App3</Name> 
    </Application> 
    <Application id='4'> 
     <Name>App4</Name> 
    </Application> 
    <Application id='5'> 
     <Name>App5</Name> 
    </Application> 
</Applications>"; 

var doc = XDocument.Parse(xml); 

После того как вы XDocument в руке , вы можете запросить его с Lync (или методы цепи вместе, если вы предпочитаете):

var appList = (from app in doc.Root.Descendants("Application") 
       select app).ToList(); 

Приведенный выше код выбирает все XElements под названием «Application» в корневом узле. Если вы укажете «Приложение», вы также получите все узлы.

С этим списком элементов, теперь вы можете просто записать некоторые данные о них:

Console.WriteLine($"{appList.Count()} Application Elements Found:"); 
appList.ForEach(app => 
{ 
    Console.WriteLine($" Application: {app.Attribute("id")}"); 
}); 

Заметим, что это с помощью C# v6 строка интерполяции функции - Я уверен, что вы можете выяснить, как вручную построить необходимые строки, если вы используете предыдущую версию C#? ;)

Надеюсь, это приведет вас к вашему пути к тому, что вы хотите?

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