Compartir a través de


Uso de Visual C# para leer datos XML desde una dirección URL

En este artículo se muestra cómo usar la XmlTextReader clase para leer XML desde una dirección URL. La información transmitida puede provenir de todo tipo de orígenes, como una secuencia de bytes de un servidor, un archivo o una TextReader clase.

Versión original del producto: Visual Studio
Número de KB original: 307643

Requisitos

En este artículo se da por supuesto que está familiarizado con los temas siguientes:

  • Microsoft Visual Studio
  • Terminología XML
  • Creación y lectura de XML
  • Direcciones URL y creación de un punto de conexión XML

En este artículo se hace referencia al espacio de nombres System.Xmlde la biblioteca de clases de .NET Framework .

Cómo leer datos XML desde una dirección URL

En este ejemplo se usa un archivo denominado Books.xml. Puede crear su propio archivo de Books.xml o usar el archivo de ejemplo que se incluye con los inicios rápidos del Kit de desarrollo de software (SDK) de .NET. Este archivo también está disponible para su descarga; consulte el primer elemento de la sección Referencias de este artículo para la ubicación de descarga.

  1. Copie el archivo Books.xml en la \Inetpub\Wwwroot carpeta del equipo.

  2. Abre Visual Studio.

  3. Cree una nueva aplicación de consola de Visual C#. Puede continuar con la sección Lista de código completa o continuar con estos pasos para compilar la aplicación.

  4. Especifique la directiva using en el System.Xml espacio de nombres para que no sea necesario calificar las declaraciones de clase más adelante en el XmlTextReader código. Debe usar la directiva using antes de cualquier otra declaración.

    using System.Xml;
    
  5. Recupere la secuencia XML mediante una dirección URL. Las secuencias se usan para proporcionar independencia del dispositivo; por lo tanto, los cambios de programa no son necesarios si cambia el origen de una secuencia. Declare una constante para la http://localhost/books.xml dirección URL. Usará la constante en el paso siguiente con XmlTextReader. Agregue el ejemplo de código siguiente al procedimiento principal de la clase predeterminada:

    String URLString = "http://localhost/books.xml";
    
  6. Cree una instancia de la XmlTextReader clase y especifique la dirección URL. Normalmente, XmlTextReader se usa si necesita tener acceso al XML como datos sin procesar sin la sobrecarga de un modelo de objetos de documento (DOM); por lo tanto, XmlTextReader proporciona un mecanismo más rápido para leer el XML. La XmlTextReader clase tiene constructores diferentes para especificar la ubicación de los datos XML. El código siguiente crea una instancia de un XmlTextReader objeto y pasa la dirección URL al constructor:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Lea el CÓDIGO XML.

    Nota:

    En este paso se muestra un bucle básico, externo while y los dos pasos siguientes se describe cómo usar ese bucle y leer XML.

    Una vez cargado, XmlTextReader realiza lecturas secuenciales para desplazarse por los datos XML y usa el método para obtener el Read registro siguiente. El Read método devuelve false si no hay más registros.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. Inspeccione los nodos. Para procesar los datos XML, cada registro tiene un tipo de nodo que se puede determinar desde la NodeType propiedad . Las Name propiedades y Value devuelven el nombre del nodo (los nombres de elemento y atributo) y el valor del nodo (el texto del nodo) del nodo actual (o registro). La NodeType enumeración determina el tipo de nodo. El código de ejemplo siguiente muestra el nombre de los elementos y el tipo de documento.

    Nota:

    En este ejemplo se omiten los atributos de elemento.

    while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + reader.Name);
                Console.WriteLine(">");
                break;
    
            case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
    
            case XmlNodeType.EndElement: //Display the end of the element.
                Console.Write("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  9. Inspeccione los atributos. Los tipos de nodo de elemento pueden incluir una lista de nodos de atributo asociados a ellos. El MovetoNextAttribute método se mueve secuencialmente a través de cada atributo del elemento . Use la HasAttributes propiedad para probar si el nodo tiene atributos. La AttributeCount propiedad devuelve el número de atributos del nodo actual.

    while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + reader.Name);
    
                while (reader.MoveToNextAttribute()) // Read the attributes.
                    Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                Console.Write(">");
                Console.WriteLine(">");
                break;
            case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
            case XmlNodeType. EndElement: //Display the end of the element.
                Console.Write("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  10. Compile y ejecute el proyecto.

Lista de código completa

using System;
using System.Xml;

namespace ReadXMLfromURL
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            String URLString = "http://localhost/books.xml";
            XmlTextReader reader = new XmlTextReader (URLString);

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);

                        while (reader.MoveToNextAttribute()) // Read the attributes.
                            Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                        Console.Write(">");
                        Console.WriteLine(">");
                        break;
                    case XmlNodeType.Text: //Display the text in each element.
                        Console.WriteLine (reader.Value);
                        break;
                    case XmlNodeType. EndElement: //Display the end of the element.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
        }
    }
}

Salida de ejemplo

<bookstore>
    <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
        <title>
        The Autobiography of Benjamin Franklin
        </title>
        <author>
            <first-name>
            Benjamin
            </first-name>
            <last-name>
            Franklin
            </last-name>
        </author>
        <price>
        8.99
        </price>
    </book>
    <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">>
        <title>
        The Confidence Man
        </title>
        <author>
            <first-name>
            Herman
            </first-name>
            <last-name>
            Melville
            </last-name>
        </author>
        <price>
        11.99
        </price>
    </book>
    <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
        <title>
        The Gorgias
        </title>
        <author>
            <name>
            Plato
            </name>
        </author>
        <price>
        9.99
        </price>
    </book>
</bookstore>

Solución de problemas

Al probar el código, puede recibir el siguiente mensaje de error de excepción:

Se produjo una excepción no controlada del tipo System.Xml.XmlException en system.xml.dll Información adicional: Declaración XML inesperada. La declaración XML debe ser el primer nodo del documento y no se permite que aparezcan caracteres de espacio en blanco antes de él. Línea 1, posición 4.

El error de excepción se produce en la siguiente línea de código.

while (reader.Read())

Para resolver el error de excepción, quite el carácter de espacio en blanco que precede al primer nodo del documento Books.xml .

Referencias