¿Cómo se puede hacer una lectura de transmisión en un archivo XML grande que contiene una secuencia xs: justo debajo del elemento raíz, sin cargar todo el archivo en una instancia de XDocument en la memoria ?Cómo leer la transmisión de un archivo XML grande en C# 3.5
Respuesta
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);
}
}
}
}
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.
Heres es un COMO: http://support.microsoft.com/kb/301228/en-us Sólo recuerde que no debe utilizar XMLTextReader pero en lugar XmlReader conjuntamente con XmlReader.Create
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
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.
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))
¡Gracias, lo he solucionado! –
- 1. ¿Cómo escribir XML (grande) en un archivo en C#?
- 2. ¿Cómo leer el archivo XML en C#?
- 3. Trabajando con un archivo XML muy grande en C#
- 4. Cómo leer la segunda columna en un archivo grande
- 5. Consultas aleatorias en un archivo xml grande
- 6. Python: HTTP Publique un archivo grande con la transmisión
- 7. ¿Cómo leer enteros elegantemente usando la transmisión en C++?
- 8. ¿Cómo leer un archivo XML con Java?
- 9. ¿Cómo leer un archivo txt grande (1 GB) en .NET?
- 10. RE: archivo XML grande
- 11. Leer cadena XML grande de TSQL PARA instrucción XML en C# .NET
- 12. División XML de un archivo grande
- 13. Directamente leer archivo binario grande en C# w/a copiar
- 14. Oracle: cargando un archivo xml grande
- 15. División de un archivo XML grande en Python
- 16. C# - Leer en un archivo de texto grande (150 MB) en un cuadro de texto enriquecido
- 17. Cómo leer el archivo XML en Android
- 18. ¿Cómo obtener un Iterator [Node] de transmisión desde un documento XML grande?
- 19. Cómo leer un archivo XML desde la web usando powershell
- 20. Cómo actualizar el archivo XML grande
- 21. ¿Puede Python xml ElementTree analizar un archivo xml muy grande?
- 22. ¿Cómo leer un archivo .gz línea por línea en C++?
- 23. Problema al leer el archivo XML en C# DataSet
- 24. Buscar y reemplazar en un archivo grande
- 25. .net 3.5: ¿Para leer connectionstring desde app.config?
- 26. Leer, modificar, escribir archivo xml en cocoa
- 27. Dividir un archivo grande en C++
- 28. cómo leer el archivo XML de la URL utilizando php
- 29. ¿Cómo escribir eficientemente un archivo de texto grande en C#?
- 30. Guardar archivo de un byte [] en C# NET 3.5
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? –