Sto modificando una serie di file XML e ho bisogno di rimuovere tutti gli attributi con il nome "pippo". Questo attributo appare in più di un tipo di elemento. Un frammento di esempio dal XML potrebbe essere:Rimuovi tutti gli attributi XML con un nome dato
<bodymatter id="######">
<level1 id="######">
<pagenum page="#####" id="######" foo="######" />
<h1 id="#####" foo="#####">Header</h1>
<imggroup id="#######">
.
.
etc.
La soluzione migliore che hanno usi Regex:
Regex regex = new Regex("foo=\"" + ".*?" + "\"", RegexOptions.Singleline);
content = regex.Replace(content, "");
So built-in parser XML potuto fare, ma idealmente voglio fare semplici sostituzioni XML/traslochi senza dover affrontare il bagaglio di un intero parser XML. Regex è la soluzione migliore in questo caso?
Edit:
Dopo alcune ricerche nella classe XmlDocument, ecco una possibile soluzione mi è venuta (per rimuovere più di un tipo di attributo memorizzato nella matrice "id"):
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]);
}
}
}
}
}
}
Non so se questo è il più efficiente possibile, ma l'ho provato e sembra funzionare bene.
Regex e XML non si mescolano. –
RegeXml, non una cosa carina – Jonesopolis
Ho modificato il tuo titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –