【问题标题】:UpperCase all Xml element values with LINQ使用 LINQ 大写所有 Xml 元素值
【发布时间】:2011-03-16 17:27:04
【问题描述】:

我有一个包含许多元素/子元素等的 XDocument,我想将每个元素的值设为大写。

doc.Descendants().ToList().ForEach(f => f.Value = f.Value.ToUpper());

不起作用,因为它将所有值(如上)连接到父元素中。

【问题讨论】:

  • 作为建议,当您想询问有关 C# 的问题时,请始终将其标记为 C#。不是 C#-2.0、C#-4.0...C#!如果您的问题取决于版本,您可以添加具有确切版本的其他标签,但始终放置 C# 标签。没有人回答您的问题不是因为它很困难,而是因为许多人使用最常见的标签(C#、.NET、LINQ)“过滤”他们看到的问题。如果您将鼠标移动到您的问题现在具有的标签上,您将看到 C# 23.7K 关注者、LINQ 3.2k 关注者以及您的标签 206 和 3 个关注者。大不同:-)

标签: c# linq linq-to-xml


【解决方案1】:

LINQ 表达式通常不应修改源的值。它们应该只返回新值(将它们视为过滤器......你放入一些东西,就会出现不同的东西)

foreach (var desc in doc.Descendants()) {
    var nodes = desc.Nodes().Where(p => p.NodeType == XmlNodeType.Text);

    foreach (XText node in nodes) {
        node.Value = node.Value.ToUpper();
    }
}

【讨论】:

    【解决方案2】:

    我以这种方式解决了它 - 不确定它是最好的,但它有效。

    private void btnConvert_Click(object sender, EventArgs e)
        {
            XDocument doc = XDocument.Parse(txtXml.Text);
            ProcessElement(doc.Elements().First());
            txtXml.Text = doc.ToString(SaveOptions.DisableFormatting);
        }
    
        private void ProcessElement(XElement element)
        {
            if (element.HasElements)
                element.Elements().ToList().ForEach(e => ProcessElement(e));
            else
                element.Value = element.Value.ToUpper();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多