2009-01-06 17 views
5

में विशेषता मान के अलावा विशेषता का नाम प्राप्त करें मुझे गतिशील एक्सएमएल प्राप्त हो रहा है जहां मैं विशेषता नाम नहीं जानूंगा, अगर आप एक्सएमएल और कोड देखेंगे ... मैंने एक साधारण उदाहरण बनाने की कोशिश की, मैं विशेषता मान यानी "myName", "myNextAttribute", और "blah" प्राप्त कर सकते हैं, लेकिन मुझे विशेषता नाम यानी "नाम", "अगला एट्रिब्यूट" और "आदि 1" नहीं मिल सकता है। कोई भी विचार, मुझे लगता है कि यह कुछ आसान होना है, मुझे याद आ रही है ... लेकिन मुझे यकीन है कि इसे याद आ रही है।एक्सएमएल

static void Main(string[] args) 
    { 
     string xml = "<test name=\"myName\" nextAttribute=\"myNextAttribute\" etc1=\"blah\"/>"; 

     TextReader sr = new StringReader(xml); 

     using (XmlReader xr = XmlReader.Create(sr)) 
     { 
      while (xr.Read()) 
      { 
       switch (xr.NodeType) 
       { 
        case XmlNodeType.Element: 
         if (xr.HasAttributes) 
         { 
          for (int i = 0; i < xr.AttributeCount; i++) 
          { 
           System.Windows.Forms.MessageBox.Show(xr.GetAttribute(i)); 
          } 
         } 
         break; 
        default: 
         break; 
       } 
      } 
     } 
    } 

उत्तर

23

आप MSDN में देख सकते हैं:

if (reader.HasAttributes) { 
    Console.WriteLine("Attributes of <" + reader.Name + ">"); 
    while (reader.MoveToNextAttribute()) { 
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value); 
    } 
    // Move the reader back to the element node. 
    reader.MoveToElement(); 
} 
+0

धन्यवाद, मैंने सोचा कि यह कुछ करीब होना चाहिए ... मुझे अपने मूल में लूप के लिए भी मिला, मैं xr.MoveToAttribute (i) कर सकता था और उसी प्रभाव को प्राप्त कर सकता था। –

0

अपने स्विच अनावश्यक है के बाद से आप केवल एक ही मामले है, बजाय रोलिंग है कि आपके अगर बयान में प्रयास करें।

if (xr.NodeType && xr.HasAttributes) 
{ 
    ... 
} 

ध्यान दें कि & & ऑपरेटर, क्रम में मूल्यांकन करता है, इसलिए यदि xr.NoteType गलत है, तर्क के बाकी अनदेखी कर रहे हैं और यदि ब्लॉक को छोड़ दिया है।

+0

इस उदाहरण में हाँ, मेरे पास 'वास्तविक दुनिया' परिदृश्य में और अधिक मामले हैं, मैंने अभी इसे साफ रखने की कोशिश की है। हालांकि धन्यवाद। –