2008-09-26 27 views
6

¿Hay algún marco de trabajo para consultar la sintaxis de SQL XML ?, me canso seriamente de iterar a través de las listas de nodos. ¿Quieres consultar XML como SQL?


¿O es solo una ilusión (si no es idiota) y ciertamente no es posible ya que XML no es una base de datos relacional?

Respuesta

13

XQuery y XPath ... XQuery es más lo que está buscando, si una estructura SQL es deseable.

+0

fresca, He estado usando XPath porque está implementado en simplexml de PHP, supongo que acaba de perder XQuery. –

+0

Xquery implementa XPath, sin embargo, es el trabajo del demonio. – Tarski

2

.Net Framework proporciona LINQ para hacer esto o se puede utilizar el espacio de nombres System.Data .Net para cargar datos de archivos XML.

Incluso puede crear consultas que tiene joins entre las mesas, etc.

Por ejemplo, System.Data.DataTable proporciona un método ReadXml().

2

usted podría tratar de LINQ to XML, pero no es el lenguaje agnóstico.

+0

¿No está en SQL, creo? – Meff

+0

La parte LINQ es .net, por lo que puede usar cualquier lenguaje con un compilador CLR –

1

XQuery es un lenguaje funcional que más se acerque a SQL. XPath es una notación para ubicar un nodo dentro del documento que se usa como parte de XSLT y XQuery.

Las bases de datos XML como MarkLogic funcionan como motores XQuery para datos XML, del mismo modo que las bases de datos relacionales funcionan como motores SQL para datos relacionales.

+0

Sql Server y Oracle también admite XQuery. – tuinstoel

0

XQuery es sin duda el camino a seguir. Esto es lo que utilizan las bases de datos XML, como eXist y MarkLogic.

En el mundo Java existen varias soluciones para ejecutar XQuery en archivos planos, sobre todo Saxon

Para .NET, no hay tanto disponible. Microsoft sí tenía una biblioteca XQuery, aunque esta fue extraída de .NET 2 y nunca ha resurgido. XQSharp es una alternativa .NET nativa, aunque actualmente solo se ha lanzado una versión de línea de comando.

1

Eso depende del problema que está resolviendo. Si el archivo XML es bastante grande, a veces es necesario usar algo como los analizadores SAX para recorrer el nodo de archivo por nodo, o obtendrá OutOfMemoryException o se agotará incluso la memoria virtual en su computadora.

Pero, si el tamaño esperado del archivo XML es relativamente pequeña, sólo tiene que utilizar algo como LINQ, también ver a mi answer - aquí he tratado de explicar, cómo hacer atravesar a través de nodos mucho más fácil con construcciones como yield return.

+0

Acabo de toparme con un problema similar, tengo la lectura de MSXML6 en archivos XML de 300 meg y el uso de más de un Gig de RAM. Afortunadamente, esto funcionó con win2k y solo tuve algunos problemas con las máquinas virtuales con archivos de página extremadamente pequeños. Creo que el rendimiento de rendimiento funcionaría, pero desafortunadamente soy un programador de Delphi y SOL para todos los hotness de .NET. –

Cuestiones relacionadas