【发布时间】:2016-04-03 15:29:44
【问题描述】:
所以,我在修改我的 XML 文档时遇到了问题。这是我的 XML
<CookBook>
<Recipe id="1">
<Title>Best recipe</Title>
<Category>...</Category>
<Description>Some text</Description>
<Amount>10</Amount>
<Ingredient>
<li>Ingredient 1</li>
<li>Ingredient 2</li>
</Ingredient>
<RecipeText>
<li>Step 1</li>
<li>Step 2</li>
<li>Step 3</li>
</RecipeText>
</Recipe>
<Recipe id="2">
<Title>Best recipe2</Title>
<Category>...</Category>
<Description>Some text</Description>
<Amount>10</Amount>
<Ingredient>
<li>Ingredient 1</li>
<li>Ingredient 2</li>
<li>Ingredient 3</li>
</Ingredient>
<RecipeText>
<li>heat the oven</li>
<li>Do something</li>
<li>Do something</li>
</RecipeText>
</Recipe>
</CookBook>
所以我需要更新成分元素内部的特定食谱的 li 元素。但我真的不知道如何...我有一个成分列表,其中包含我想要的 XML 值。
foreach (var item in lvAddIngredient.Items)
{
string text = item.ToString();
ingredients.Add(text);
}
当我创建一个新食谱时,我使用这个代码
var doc = XDocument.Load("recipeXML.xml");
var newElement = new XElement("Recipe", new XAttribute("id", id.ToString()),
new XElement("Title", txtTitle.Text),
new XElement("Category", selectedCategory.ToString()),
new XElement("Description", txtDescription.Text),
new XElement("Amount", txtAmount.Text),
new XElement("Ingredient", ingredients.Select(text => new XElement("li", text))),
new XElement("RecipeText", recipeText.Select(text => new XElement("li", text))));
doc.Element("CookBook").Add(newElement);
doc.Save("recipeXML.xml");
但我不知道如何更新这些 li 元素的值。我尝试过类似的方法,但语法错误。
var xdoc = XDocument.Load("recipeXML.xml");
string id = lbRecipes.SelectedValue.ToString();
var items = from item in xdoc.Descendants("Recipe")
where item.Attribute("id").Value == id
select item;
foreach (XElement ele in items)
{
ele.SetElementValue("Title", txtTitle.Text);
ele.SetElementValue("Category",cbAddCategory.Text);
ele.SetElementValue("Amount", txtAmount.Text);
ele.SetElementValue("Description", txtDescription.Text);
ele.SetElementValue("Ingredient", ingredients.Select(text => ele.SetElementValue("li", text)));
}
【问题讨论】:
-
最初创建 DOM 时,使用
ingredients.Select(text => new XElement("li", text))作为Ingredient元素的内容。那么,当您想要修改该元素时,为什么不使用完全相同的语法呢?你的问题很不清楚。请提供一个好的minimal reproducible example,它可以可靠地重现您遇到的任何问题,并准确描述该问题是什么:代码现在做什么,您希望它做什么? -
List
成分 = ele.Element("Ingredient").Elements("li").ToList();成分[0].Value = 1234;