2011-06-28 7 views
7

के लिए मैं वर्तमान में है का उपयोग करते हुए:हटाया जा रहा है एक्सएमएल एक चयनित xPath और एक निम्न कोड पाश

XPathNodeIterator theNodes = theNav.Select(theXPath.ToString()); 

while (theNodes.MoveNext()) 
{ 
    //some attempts i though were close 
    //theNodes.RemoveChild(theNodes.Current.OuterXml); 
    //theNodes.Current.DeleteSelf(); 
} 

मैं मैं क्या एक्सएमएल में वापस करना चाहते करने के लिए xpath की स्थापना की है और मैं सब कुछ है कि लूप में चलाया जाता है हटाना चाहते हैं। मैंने सूचना को हटाने के कुछ तरीकों की कोशिश की है लेकिन यह मेरे वाक्यविन्यास पसंद नहीं है। मुझे माइक्रोसॉफ्ट समर्थन पर एक उदाहरण मिला: http://support.microsoft.com/kb/317666 लेकिन मैं प्रत्येक के बजाए इसका उपयोग करना चाहता हूं।

कोई टिप्पणी या प्रश्न की सराहना की जाती है।

+0

अपने प्रश्न क्या है? – Bibhu

+0

xpath (टैग और सभी) द्वारा लौटाए गए सभी तत्वों को ठीक से कैसे हटाएं – Johnston

+1

XPathNodeIterator में 'RemoveChild' विधि के रूप में नहीं है और [इसे सीधे संशोधित नहीं किया जाना चाहिए] (http://msdn.microsoft.com/en- हमें/पुस्तकालय/system.xml.xpath.xpathnodeiterator.current.aspx)। क्या आपको एक समय लूप की आवश्यकता है? @ एलेक्स-एज़ा के रूप में XDocument का उपयोग करना सुझाव देता है कि आप जो भी मांग रहे हैं उसके समान कार्यशील रूप से वही है। – cordsen

उत्तर

3
string nodeXPath = "your x path"; 

XmlDocument document = new XmlDocument(); 
document.Load(/*your file path*/); 

XmlNode node = document.SelectSingleNode(nodeXPath); 
node.RemoveAll(); 

XmlNode parentnode = node.ParentNode; 
parentnode.RemoveChild(node); 
document.Save("File Path"); 
+0

क्यों न सिर्फ 'नोड। RemoveAll(); '? –

+0

@ बिबू: वही उत्तर यहां पूर्वनिर्धारित है। @Alex: node.RemoveAll(); यह सभी बच्चे नोड्स को हटा देगा, लेकिन यह सभी नोड 'विशेषताओं को भी हटा देगा। –

+0

@Alex Aza और Jalal Aldeen Saa'd - मुझे लगता है कि "जॉनस्टन" माता-पिता नोड को भी हटाना चाहता है, इसलिए यह नोड का उपयोग करना बेहतर होगा। RemoveAll(); – Bibhu

4

XDocument का उपयोग क्यों नहीं करें?

var xmlText = "<Elements><Element1 /><Element2 /></Elements>"; 
var document = XDocument.Parse(xmlText); 

var element = document.XPathSelectElement("Elements/Element1"); 
element.Remove(); 

var result = document.ToString(); 

result<Elements><Element2 /></Elements> हो जाएगा।

या:

var document = XDocument.Load(fileName); 

var element = document.XPathSelectElement("Elements/Element1"); 
element.Remove(); 

document.Savel(fileName); 

[संपादित करें] नेट 2 के लिए, आप XmlDocument उपयोग कर सकते हैं:

XmlDocument document = new XmlDocument(); 
document.Load(fileName); 

XmlNode node = document.SelectSingleNode("Elements/Element1"); 
node.ParentNode.RemoveChild(node); 

document.Save(fileName); 

[संपादित करें]

आप सभी को दूर करने की जरूरत है बाल तत्व और गुण:

XmlNode node = document.SelectSingleNode("Elements"); 
node.RemoveAll(); 

आप विशेषताओं रखने के लिए की जरूरत है, लेकिन हटाना तत्वों:

XmlNode node = document.SelectSingleNode("Elements"); 
foreach (XmlNode childNode in node.ChildNodes) 
    node.RemoveChild(childNode); 
+0

मैं देख नहीं सकता, काम करने के लिए उपयोग करने के लिए (System.Xml.Linq.XDocument) त्रुटियों को – Johnston

+0

खोजने में सक्षम नहीं है, मैं बस इतना कहता हूं कि मैं इसे पहले से सेट अप करने के साथ हमेशा कुछ भी हटाने का एक आसान तरीका होगा ..it पूरी तरह से प्रिंट करता है – Johnston

+1

@ जॉनस्टन - .NET का कौन सा संस्करण आप उपयोग कर रहे हैं? –

1

आप उपयोग कर सकते हैं XmlDocument:

string nodeXPath = "your x path"; 

XmlDocument document = new XmlDocument(); 
document.Load(/*your file path*/);//or document.LoadXml(... 

XmlNode node = document.SelectSingleNode(nodeXPath); 

if (node.HasChildNodes) 
{ 
    //note that you can use node.RemoveAll(); it will remove all child nodes, but it will also remove all node' attributes. 

    for (int childNodeIndex = 0; childNodeIndex < node.ChildNodes.Count; childNodeIndex++) 
    { 
     node.RemoveChild(node.ChildNodes[childNodeIndex]); 
    } 
} 

document.Save("your file path")); 
संबंधित मुद्दे