XDocument用小写替换所有节点值

时间:2013-08-10 05:48:58

标签: linq-to-xml

我需要在XDocument小写中创建所有值。这样做的最佳方式是什么?

为了澄清,我想更改所有文本值,而不指定任何节点的名称。

4 个答案:

答案 0 :(得分:6)

您还可以执行以下操作:

doc.Document
   .DescendantNodes()
   .OfType<XText>()
   .ToList().ForEach(x => x.Value = x.Value.ToLower());

答案 1 :(得分:2)

我设法用XPath做到了:

using System.Xml.XPath;

foreach (XText text in (IEnumerable)xdoc.XPathEvaluate("//*/text()"))
{
     text.Value = text.Value.ToLower();
}

答案 2 :(得分:0)

甚至可以使用XML的示例更改属性文本...

string @xml = @"<X:NOTE xmlns:X='http://www.w3.org/1999/xhtml'>
<TO>TOVE</TO>
<FROM>JANI</FROM>
<HEADING>REMINDER</HEADING>
<BODY>DON'T FORGET ME THIS WEEKEND!</BODY>
</X:NOTE>";

var xml2 = XDocument.Parse(xml);
var nodes = xml2.DescendantNodes();

foreach (XNode node in nodes)
{
    XText text = node as XText;

    if (text != null)
    {
        text.Value = text.Value.ToLower();
    }
    else
    {
        // This part if you want to ToLower attributes' values
        XElement element = node as XElement;

        if (element != null)
        {
            foreach (XAttribute attr in element.Attributes())
            {
                attr.Value = attr.Value.ToLower();
            }
        }
    }
}

Console.WriteLine(xml2);

答案 3 :(得分:0)

以下示例将对问题进行排序

strxml =" <cars><name><ford>model1</ford>TEXTVALUE<renault>MODEL2</renault></name></cars>"

   XDocument objDocument = XDocument.Parse(strxml);        

   var varNodeType = objDocument.
                     DescendantNodes().
                     Where(x => x.NodeType == XmlNodeType.Text);

   foreach (var objSubType in varNodeType)
   {
     ((System.Xml.Linq.XText)(objSubType)).Value = ((System.Xml.Linq.XText)(objSubType)).Value.ToLower();
   }