2010-05-24 9 views
7

मैं निम्न XML है:कैसे खोज और करने के लिए नेविगेट एक्सएमएल नोड्स

<LOCALCELL_V18 ID = "0x2d100000"> 
    <MXPWR ID = "0x3d1003a0">100</MXPWR> 
</LOCALCELL_V18> 
<LOCALCELL_V18 ID = "0x2d140000"> 
    <MXPWR ID = "0x3d1403a0">200</MXPWR> 
</LOCALCELL_V18> 
<LOCALCELL_V18 ID = "0x2d180000"> 
    <MXPWR ID = "0x3d1803a0">300</MXPWR> 
</LOCALCELL_V18> 

मैं हर <MXPWR> के भीतर पाठ करना चाहते हैं। हालांकि, आंतरिक पाठ का पता लगाने के लिए आईडी # का उपयोग करने की अनुमति नहीं है क्योंकि यह हमेशा समान नहीं होता है। यहां मेरा कोड है:

XmlNodeList LocalCell = xmlDocument.GetElementsByTagName("LOCALCELL_V18"); 

foreach (XmlNode LocalCell_Children in LocalCell) 
{ 
    XmlElement MXPWR = (XmlElement)LocalCell_Children; 
    XmlNodeList MXPWR_List = MXPWR.GetElementsByTagName("MXPWR"); 
    for (int i = 0; i < MXPWR_List.Count; i++) 
    { 
     MaxPwr_form_str = MXPWR_List[i].InnerText; 
    } 
} 

किसी भी राय की सराहना की जाएगी।

उत्तर

8

मैं xpath का उपयोग करूंगा। यह सिर्फ इस तरह की समस्या के लिए बनाया गया था। कुछ की तरह:

using System.Xml; 
using System.Xml.XPath; 
.... 
string fileName = "data.xml"; // your file here 
XPathDocument doc = new XPathDocument(fileName); 
XPathNavigator nav = doc.CreateNavigator(); 

// Compile an xpath expression 
XPathExpression expr = nav.Compile("./LOCALCELL_V18/MXPWR"); 
XPathNodeIterator iterator = nav.Select(expr); 

// Iterate on the node set 
while (iterator.MoveNext()) 
{ 
    string s = iterator.Current.Value; 
} 

जब मैं अपने एक्सएमएल फ़ाइल पर इस चलाने के (एक रूट नोड में लिपटे) मैं:

s = 100 
s = 200 
s = 300 
4
XLinq

मैं का प्रयोग करेंगे:

using System.Xml.Linq; 

var xDoc = XDocument.Load("data.xml"); 

var mxpwrs = xDoc.Descendants("MXPWR"); 
foreach (var mxpwr in mxpwrs) 
{ 
    Console.WriteLine(mxpwr.Value); 
} 
+0

Linq के लिए बिल्कुल सही उपयोग Xpath की आवश्यकता को खत्म करने के लिए। –

संबंधित मुद्दे