使用LINQ使用UpperCase所有Xml元素值

时间:2011-03-16 08:40:09

标签: c# linq linq-to-xml

我有一个带有许多元素/子元素等的XDocument,我想制作每个元素UpperCase的值。

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

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

2 个答案:

答案 0 :(得分:2)

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();
    }
}

答案 1 :(得分:0)

我这样解决了 - 不确定它是最好的但是有效。

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();
    }