2009-01-06 15 views
5

Recibo xml dinámico en el que no sabré los nombres de los atributos, si miras el código xml y ... Intenté hacer un ejemplo simple, puede obtener los valores de los atributos, es decir "myName", "myNextAttribute" y "blah", pero no puedo obtener los nombres de los atributos, es decir, "nombre", "nextAttribute" y "etc1". Alguna idea, me imagino que tiene que ser algo fácil Me estoy perdiendo ... pero estoy seguro de que me la falta.obtener el nombre del atributo además del valor del atributo en 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; 
       } 
      } 
     } 
    } 

Respuesta

23

Se puede ver en 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

Gracias, pensé que tenía que ser algo cercano ... también encontré en mi ciclo for original, podría haber hecho xr.MoveToAttribute (i) y obtuve el mismo efecto. –

0

El conmutador es innecesaria ya que sólo tiene un solo caso, intenta rodar que en su sentencia if en su lugar.

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

Tenga en cuenta que el operador & & evalúa con el fin, por lo que si xr.NoteType es falso, el resto de los argumentos son ignorados y el bloque si se salta.

+0

En este ejemplo, sí, tengo más casos en el escenario del "mundo real", solo traté de mantenerlo limpio. Gracias sin embargo. –

Cuestiones relacionadas