2008-09-05 19 views

Respuesta

9

Ir con un analizador SAX elemento de estilo y la clase XmlTextReader creada con XmlReader.Create sería una buena idea, sí. Aquí está un ejemplo de código modificado ligeramente desde CodeGuru:

void ParseURL(string strUrl) 
{ 
    try 
    { 
    using (var reader = XmlReader.Create(strUrl)) 
    { 
     while (reader.Read()) 
     { 
     switch (reader.NodeType) 
     { 
      case XmlNodeType.Element: 
      var attributes = new Hashtable(); 
      var strURI = reader.NamespaceURI; 
      var strName = reader.Name; 
      if (reader.HasAttributes) 
      { 
       for (int i = 0; i < reader.AttributeCount; i++) 
       { 
       reader.MoveToAttribute(i); 
       attributes.Add(reader.Name,reader.Value); 
       } 
      } 
      StartElement(strURI,strName,strName,attributes); 
      break; 
      // 
      //you can handle other cases here 
      // 
      //case XmlNodeType.EndElement: 
      // Todo 
      //case XmlNodeType.Text: 
      // Todo 
      default: 
      break; 
      } 
     } 
     } 
     catch (XmlException e) 
     { 
     Console.WriteLine("error occured: " + e.Message); 
     } 
    } 
    } 
} 
+0

Algunas cosas me di cuenta: La sentencia catch está en el lugar equivocado (debe ser después de la segunda a la última llave de cierre) y hay una llave adicional de cierre después de la declaración del último corte (está intentando cerrar el enunciado del caso, pero solo cierra la declaración del interruptor). Además, no puedo encontrar el origen del método StartElement, ¿o se supone que es un método ficticio para reemplazarlo con el código de usuario? –

0

Creo que no es posible si desea usar el modelo de objetos (es decir, XElement \ XDocument) para consultar XML. Obviamente, no puede construir árbol de objetos XML sin leer suficientes datos. Sin embargo, puede usar la clase XmlReader.

La clase XmlReader lee los datos XML de una secuencia o archivo. Proporciona acceso que no está en caché, reenviar solo, de solo lectura a datos XML.

0

Estoy confundido por la mención de los "xs: secuencia" - esto es un elemento de Esquema XML.

¿Está tratando de abrir un archivo grande de esquema de XML? ¿Está abierto un archivo XML grande que se basa en ese esquema? ¿O está tratando de abrir un archivo XML grande y validarlo al mismo tiempo?

Ninguna de estas situaciones debería proporcionarle un problema con el XmlReader estándar (o XmlValidatingReader).

XML Lectura con XMLReader: http://msdn.microsoft.com/en-us/library/9d83k261(VS.80).aspx

0

Ese código de ejemplo intenta convertir código de estilo XmlReader en código de estilo SAX - si estás escribiendo código desde cero Me acabo de utilizar XmlReader como estaba previsto - Tire sin empujar.

7

No puedo agregar un comentario, ya que me acabo de registrar pero el código del ejemplo publicado por Hirvox y actualmente seleccionado como la respuesta tiene un error. No debería tener la instrucción new cuando se usa el método estático Create.

actual:

using (var reader = new XmlReader.Create(strUrl)) 

fijo:

using (var reader = XmlReader.Create(strUrl)) 
+0

¡Gracias, lo he solucionado! –

Cuestiones relacionadas