我正在编辑一系列 XML 文件,我需要删除所有名为“foo”的属性。此属性出现在不止一种类型的元素中。XML 中的示例片段可能是:
<bodymatter id="######">
<level1 id="######">
<pagenum page="#####" id="######" foo="######" />
<h1 id="#####" foo="#####">Header</h1>
<imggroup id="#######">
.
.
etc.
我使用正则表达式的最佳解决方案:
Regex regex = new Regex("foo=\"" + ".*?" + "\"", RegexOptions.Singleline);
content = regex.Replace(content, "");
我知道内置的 XML 解析器可以提供帮助,但理想情况下,我想进行简单的 XML 替换/删除,而不必处理整个 XML 解析器的包袱。在这种情况下,Regex 是最好的解决方案吗?
编辑:
在对 XmlDocument 类进行一些研究之后,这是我想出的一种可能的解决方案(删除存储在数组“ids”中的多个属性类型):
private void removeAttributesbyName(string[] ids)
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNodeList xnlNodes = doc.GetElementsByTagName("*");
foreach (XmlElement el in xnlNodes)
{
for (int i = 0; i <= ids.Length - 1; i++)
{
if (el.HasAttribute(ids[i]))
{
el.RemoveAttribute(ids[i]);
}
if (el.HasChildNodes)
{
foreach (XmlNode child in el.ChildNodes)
{
if (child is XmlElement && (child as XmlElement).HasAttribute(ids[i]))
{
(child as XmlElement).RemoveAttribute(ids[i]);
}
}
}
}
}
}
我不知道这是否尽可能高效,但我已经对其进行了测试,它似乎工作正常。