2009-01-06 16 views
5

Otrzymuję dynamiczny xml, gdzie nie będę znać nazwy atrybutów, jeśli spojrzysz na xml i kod ... Próbowałem zrobić prosty przykład, I może uzyskać wartości atrybutów, np. "myName", "myNextAttribute" i "blah", ale nie mogę uzyskać nazw atrybutów, np. "name", "nextAttribute" i "etc1". Wszelkie pomysły, myślę, że to musi być coś łatwego, czego mi brakuje ... ale jestem pewien, że go przegapiłem.uzyskać nazwę atrybutu oprócz wartości atrybutu w xml

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; 
       } 
      } 
     } 
    } 

Odpowiedz

23

można zobaczyć w 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

Dzięki, pomyślałem, że to musi być coś bliskiego ... również znalazłem w mojej oryginalnej pętli, mogłem zrobić xr.MoveToAttribute (i) i uzyskać ten sam wpływ. –

0

Twój przełącznik jest niepotrzebny, ponieważ masz tylko jeden przypadek, spróbuj toczenia, który w swojej if zamiast.

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

Zauważ, że operator & & ocenia w porządku, więc jeśli xr.NoteType jest fałszywe, pozostałe argumenty są ignorowane, a jeśli blok jest pomijany.

+0

W tym przykładzie mam więcej przypadków w scenariuszu "prawdziwego świata", po prostu starałem się zachować go w czystości. W każdym razie dzięki. –

Powiązane problemy