, Когда Вы хотите, чтобы он проверил (в XML/XHTML - спасибо, Loren Segal ).
XDocument doc;
...
XElement penItemValue = doc
.Elements("MyStore")
.Elements("Category")
.Elements("itemName")
.Single(itemName => itemName.Value == "Pen")
.Parent
.Element("itemValue");
penItemValue.Value = "123";
Вы можете найти и обновить его с помощью LinqToXml:
XElement root = XElement.Load("myXml.xml");
var penCategory = from category in root.Descendants("Category")
where category.Element("itemName") != null
&& category.Element("itemName").Value == "Pen"
select category;
penCategory.Element("itemName").Value = updatedValue;
Я бы использовал Xpath, чтобы найти элемент, который вы ищете, а затем напрямую управлять им.
Для XPath что-то вроде // Категория [itemName = 'Pen'] / itemNumber
найдет элемент
для получения дополнительной информации о Xpath см.
Следующий (очень простой) фрагмент кода работает для меня в моно
using System.Xml;
namespace test
{
class myclass
{
public static void Main(string[] argv)
{
XmlTextReader reader = new XmlTextReader(argv[0]);
XmlDocument doc = new XmlDocument();
doc.Load(reader);
reader.Close();
XmlNode myNode;
XmlElement root = doc.DocumentElement;
myNode = root.SelectSingleNode("//Category[itemName='Pen']/itemNumber");
myNode.InnerText = "18";
doc.Save(argv[1]);
}
}
}
Использование XPath (который будет знаком большинству разработчиков XML):
var xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<MyStore>
<Category>
<itemName>Pen</itemName>
<itemNumber>12</itemNumber>
</Category>
<Category>
<itemName>Paper</itemName>
<itemNumber>23</itemNumber>
</Category>
</MyStore>";
var doc = new XmlDocument();
doc.LoadXml(xml);
var nav = doc.CreateNavigator();
var iter = nav.Select("/MyStore/Category[itemName='Pen']/itemNumber");
iter.MoveNext();
iter.Current.SetValue("42");