将XMLDocument中的所有标记名称改为小写

4

我需要将所有标签名称改为小写,但保留InnerText或Value不变。我只找到了更改整个文档大小写的线程,而不是仅更改标签名称的方法。

代码

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlDoc.OuterXml.ToLower());
2个回答

5

Original.xml

<?xml version="1.0" encoding="utf-8" ?>
<ROOT>
  <InNeRtAg>SoMe TeXt</InNeRtAg>
  <NeStEdElEmEnT>
    <InNeRnEsTiNg>SoMe TeXt</InNeRnEsTiNg>
  </NeStEdElEmEnT>
</ROOT>

更改包括根元素在内的所有节点:

var doc = XDocument.Load("Original.xml");

// also need to change the root element
doc.Root.Name = doc.Root.Name.LocalName.ToLower();

foreach (var element in doc.Descendants().Elements())
{
    element.Name = element.Name.LocalName.ToLower();
}

doc.Save("Modified.xml");

修改后的.xml文件中的结果

<?xml version="1.0" encoding="utf-8"?>
<root>
  <innertag>SoMe TeXt</innertag>
  <nestedelement>
    <innernesting>SoMe TeXt</innernesting>
  </nestedelement>
</root>

使用时

foreach (var element in doc.Descendants().Elements())
{
    element.Name = element.Name.LocalName.ToLower();
}

根元素将不会被更改。
<?xml version="1.0" encoding="utf-8"?>
<ROOT>
  <innertag>SoMe TeXt</innertag>
  <nestedelement>
    <innernesting>SoMe TeXt</innernesting>
  </nestedelement>
</ROOT>

1
你可以使用 XDocument.DescendantNodes().OfType<XElement>() 来避免根节点的特殊情况。 - Orace

2
你可以尝试像这样做:

你可以尝试像这样做:

var doc = XDocument.Load(filepath);
foreach (var element in doc.Descendants().Elements())
{
    element.Name = element.Name.LocalName.ToLower();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接