2014-11-25 3 views
-1

У меня есть следующий XML-файл. Мне нужно заменить внутренний текст любой тег, который содержит значение «музей», или просто тег для начала:Как найти и изменить внутренний текст элементов xml? C#

<src> 
    <riga> 
     <com>&#190;</com> 
     <riquadro797>Direction to move</riquadro797> 
    </riga> 
    <riga> 
     <llt> 
     <com>Museum</com> 
     <elemento797>Direction not to move</elemento797> 
     </llt> 
    </riga> 
    <operation> 
     <com>&#160;</com> 
     <riquadro797>Museum</riquadro797> 
    </operation> 
    <riga> 
    <gt> 
     <elemento797>Direction not to move</elemento797> 
    </gt> 
</riga>  
</src> 

Я разобран этот файл XElement. То, что я пытался и Дос-не работает:

var tt = xmlCluster.Elements(First(x => x.Value == "Museum");    

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

var el = rootElRecDocXml.SelectSingleNode("src/riga/gt/elemento797[text()='"+mFilePath+"']"); 

Как это сделать? Любая помощь будет оценена!

+0

Вы даже попытались выполнить поиск в Google на 'Parsing XElement C#' – MethodMan

ответ

4

просто захватить все элементы с Museum значениями:

var doc = XDocument.Parse(xml); 
var elements = doc.Descendants().Where(e => e.Value == "Museum"); 

foreach (var ele in elements) 
    ele.Value = "Test"; 

//doc is updated with new values 

как отметил Selman22, документ будет только рабочая копия вашего XML. Вам нужно будет позвонить doc.Save, чтобы применить что-либо обратно на диск или где угодно

+1

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

+0

@ Selman22 почему на Земле вы должны были бы рассказать об этом человеку. 'Пожалуйста, обратите внимание, что ничего не будет сохранено, если вы не сохраните его ... Ду? – DidIReallyWriteThat

+2

, потому что это правда. кто-то, кто не использовал Linq для XML, мог легко подумать, что это повлияет на сам документ. Кстати, вы не видели достаточно вопросов здесь, иначе вы бы поняли мою точку зрения. –

1

Элементы() только смотрят на один уровень в иерархии. Я думаю, что вы хотите (потомков) вместо ...

1

Если вы хотите вариант старше школы XPath, что вам нужно сделать глобальный поиск по дереву - вы можете использовать выражение в // XPath для этого:

var els = rootElRecDocXml.SelectNodes("//[text()='"+mFilePath+"']"); 

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

  • Нет связанных вопросов^_^