我正在编辑一系列 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 解析器的负担。
在这种情况下,正则表达式是最好的解决方案吗?
Edit:
经过对 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]);
}
}
}
}
}
}
我不知道这是否尽可能有效,但我已经测试过它,它似乎工作得很好。
不要使用正则表达式进行 XML 操作。您可以使用 Linq to XML:
XDocument xdoc = XDocument.Parse(xml);
foreach (var node in xdoc.Descendants().Where(e => e.Attribute("foo")!=null))
{
node.Attribute("foo").Remove();
}
string result = xdoc.ToString();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)