我正在編輯一系列XML文件,並且需要刪除名稱爲「foo」的所有屬性。該屬性出現在多種類型的元素中。從XML的一個例子片斷可能是:使用給定名稱刪除所有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]);
}
}
}
}
}
}
我不知道這是否有效,因爲它可能是,但我已經測試它,它似乎工作正常。
正則表達式和XML不能混用。 –
RegeXml,不是漂亮的東西 – Jonesopolis
我編輯過你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –