【发布时间】:2013-07-27 06:38:00
【问题描述】:
我正在编辑一系列 XML 文件,我需要删除所有名为“foo”的属性。此属性出现在不止一种类型的元素中。 XML 中的一个示例 sn-p 可能是:
<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]);
}
}
}
}
}
}
我不知道这是否尽可能高效,但我已经对其进行了测试,它似乎工作正常。
【问题讨论】:
-
Regex 和 XML 不能混合使用。
-
RegeXml,不是什么漂亮的东西
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。