के साथ सभी एक्सएमएल विशेषताओं को हटाएं मैं एक्सएमएल फाइलों की एक श्रृंखला संपादित कर रहा हूं, और मुझे "foo" नाम से सभी विशेषताओं को हटाने की जरूरत है। यह विशेषता एक से अधिक प्रकार के तत्व में प्रकट होती है। एक्सएमएल से एक उदाहरण का टुकड़ा हो सकता है:किसी दिए गए नाम
<bodymatter id="######">
<level1 id="######">
<pagenum page="#####" id="######" foo="######" />
<h1 id="#####" foo="#####">Header</h1>
<imggroup id="#######">
.
.
etc.
सबसे अच्छा समाधान मैं Regex का उपयोग करता है:
Regex regex = new Regex("foo=\"" + ".*?" + "\"", RegexOptions.Singleline);
content = regex.Replace(content, "");
मैं पता निर्मित एक्सएमएल पारसर्स मदद कर सकता है, लेकिन आदर्श मैं सरल XML प्रतिस्थापन बनाना चाहते एक संपूर्ण एक्सएमएल पार्सर के सामान से निपटने के बिना/निकासी। क्या इस मामले में रेगेक्स सबसे अच्छा समाधान है?
संपादित:
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]);
}
}
}
}
}
}
मुझे नहीं पता कि यह संभवतः जितना संभव हो उतना कुशल है, लेकिन मैंने इसका परीक्षण किया है और ऐसा लगता है कि यह ठीक काम करता है।
रेगेक्स और एक्सएमएल मिश्रण नहीं करते हैं। –
RegeXml, एक सुंदर चीज़ नहीं – Jonesopolis
मैंने आपका शीर्षक संपादित किया है। कृपया देखें, "[प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए?] (Http://meta.stackexchange.com/questions/19190/)", जहां आम सहमति है "नहीं, उन्हें नहीं करना चाहिए"। –