Uso de Visual C# para leer datos XML de 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 en secuencias puede proceder de tipos de orígenes, como una secuencia de bytes de un servidor, un archivo o una TextReader clase.

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

Requisitos

En este artículo se supone 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.Xml.NET Framework biblioteca de clases .

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 deBooks.xml o usar el archivo de ejemplo que se incluye con las guías de inicio rápido 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 ver la ubicación de descarga.

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

  2. Abra Visual Studio.

  3. Cree una nueva aplicación de consola de Visual C#. Puede continuar con la sección Lista completa de código 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. Secuencias se usan para proporcionar independencia del dispositivo; por lo tanto, los cambios del 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 siguiente ejemplo de código 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 acceder 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 XML.

    Nota

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

    Una vez cargado, XmlTextReader realiza lecturas secuenciales para moverse por los datos XML y usa el Read método para obtener el siguiente registro. 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 a partir de 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. En el código de ejemplo siguiente se 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:

Excepción no controlada del tipo System.Xml. XmlException se produjo 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 delante 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 deBooks.xml .

Referencias