учитывая этот xml файл
<root>
<event id="123">
<option subID="1">English</option>
<option subID="2">German</option>
<option subID="3">French</option>
<option subID="4">Spanish</option>
</event>
</root>
Как изменить значение испанского на японский?
У меня есть этот запрос linq:
var nodeToEdit = xml.Descendants("event").Where(x => (string)x.Attribute("subID") == "4");
и после выполнения некоторых вещей с этим запросом я использую это, чтобы изменить значение:
foreach(var item in nodeToEdit.Elements())
{
var query = item.Descendants("option").Where(z => (string)z.Attribute("subID").Value == "4");
foreach (var bla in query)
{
bla.Value = "Japanese"; // bla.Value = Spanish
}
}
но когда я отлаживаю, я вижу, что мой query
не имеет результатов.
Если это ваш фактический код и XML, то да, это не сработает по нескольким причинам. Это один из возможных способов исправить это:
//select <event> node by id attribute
var nodeToEdit = xml.Descendants("event")
.FirstOrDefault(x => (string)x.Attribute("id") == "123");
if(nodeToEdit != null)
{
//select <option> node within current <event> by subID attribute
var optionToEdit = nodeToEdit.Elements()
.FirstOrDefault(z => (string)z.Attribute("subID") == "4");
optionToEdit.Value = "Japanese";
}
Или, только если следующее это будет считаться читаемым для вас, вы можете сделать за один проход:
//select <option> node based on id attribute of it parent & subID attribute of it own
var nodeToEdit = xml.Descendants("option")
.FirstOrDefault(x => (string)x.Parent.Attribute("id") == "123"
&&
(string)x.Attribute("subID") == "4"
);
<event>
не имеет атрибутаsubID
:var nodeToEdit = xml.Descendants("event").Where(x => (string)x.Attribute("subID") == "4");