【问题标题】:Append attribute to each element in XML File将属性附加到 XML 文件中的每个元素
【发布时间】:2013-01-14 15:17:44
【问题描述】:

我有一个 xml,我想为 xml 文件中的每个元素附加一个属性。

IEnumerable<XElement> childList = from el in xml.Elements()
                                  select el;

textBox1.Text = childList.ToString();

foreach (XElement el in childList)
{
    el.Add(new XAttribute("Liczba_Potomkow", "dziesiec"));
    textBox1.Text = el.ToString();
    xml.Save("Employees.xml");
}

不幸的是,当我打开文件时,似乎只有第一行受到影响。 (只有第一个元素获得新属性)。为什么会这样?

【问题讨论】:

  • 我应该修改什么以便每个属性的值是节点数(不仅仅是子节点)?

标签: c# .net xml linq-to-xml


【解决方案1】:

我假设xmlXDocument?如果是这样,您将直接在根元素的 parent 上调用 Elements() - 所以它找到的唯一元素将是根元素本身。

如果你想对文档中的所有元素做一些事情,你应该使用Descendants()方法。

此外,您的查询表达式毫无意义 - 您还不如使用 xml.Elements() - 我真的认为您不应该在循环中保存。

我想你只是想要:

foreach (var element in xml.Descendants())
{
    element.Add(new XAttribute("Liczba_Potomkow", "dziesiec"));
}
xml.Save("Employees.xml");

【讨论】:

  • 我应该修改什么,以便每个属性的值是节点的数量(不仅是子节点,每个元素当然不同)? – 彼得 2 分钟前编辑
  • 自己找到答案了! var ile = element.Descendants().Count();
  • @Peter:说实话,你的意思并不是很清楚。也许将其作为一个单独的问题提出。请记住,“节点”对于不同的 API 可能意味着不同的东西。您会将属性包含为节点吗? (旧的 DOM API 有,但 LINQ to XML 没有。)请注意,Descendants() 只能找到 元素 - 所以它不包括文本节点。
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2011-10-05
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多