Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando un documento XML está en memoria, la representación conceptual es un árbol. Para la programación, tiene una jerarquía de objetos para acceder a los nodos del árbol. En el ejemplo siguiente se muestra cómo el contenido XML se convierte en nodos.
A medida que el XML se lee en el Modelo de objetos de documento XML (DOM), las partes se traducen en nodos y estos nodos conservan metadatos adicionales sobre sí mismos, como su tipo de nodo y sus valores. El tipo de nodo es su objeto y es lo que determina qué acciones se pueden realizar y qué propiedades se pueden establecer o recuperar.
Si tiene el siguiente código XML simple:
Entrada
<book>
<title>The Handmaid's Tale</title>
</book>
La entrada se representa en memoria como el árbol de nodos siguiente con la propiedad de tipo de nodo asignado:
Representación de árbol de nodo de libro y título
El book
elemento se convierte en un objeto XmlElement , el elemento siguiente, title
, también se convierte en XmlElement, mientras que el contenido del elemento se convierte en un objeto XmlText . Al examinar los métodos y propiedades XmlElement , los métodos y propiedades son diferentes de los métodos y propiedades disponibles en un objeto XmlText . Por lo tanto, es fundamental saber en qué tipo de nodo se convierte el marcado XML, ya que su tipo de nodo determina las acciones que se pueden realizar.
En el ejemplo siguiente se leen datos XML y se escribe texto diferente según el tipo de nodo. Con el siguiente archivo de datos XML como entrada, items.xml:
Entrada
<?xml version="1.0"?>
<!-- This is a sample XML document -->
<!DOCTYPE Items [<!ENTITY number "123">]>
<Items>
<Item>Test with an entity: &number;</Item>
<Item>test with a child element <more/> stuff</Item>
<Item>test with a CDATA section <![CDATA[<456>]]> def</Item>
<Item>Test with a char entity: A</Item>
<!-- Fourteen chars in this element.-->
<Item>1234567890ABCD</Item>
</Items>
En el ejemplo de código siguiente se lee el archivo items.xml y se muestra información para cada tipo de nodo.
Imports System
Imports System.IO
Imports System.Xml
Public Class Sample
Private Const filename As String = "items.xml"
Public Shared Sub Main()
Dim reader As XmlTextReader = Nothing
Try
' Load the reader with the data file and
'ignore all white space nodes.
reader = New XmlTextReader(filename)
reader.WhitespaceHandling = WhitespaceHandling.None
' Parse the file and display each of the nodes.
While reader.Read()
Select Case reader.NodeType
Case XmlNodeType.Element
Console.Write("<{0}>", reader.Name)
Case XmlNodeType.Text
Console.Write(reader.Value)
Case XmlNodeType.CDATA
Console.Write("<![CDATA[{0}]]>", reader.Value)
Case XmlNodeType.ProcessingInstruction
Console.Write("<?{0} {1}?>", reader.Name, reader.Value)
Case XmlNodeType.Comment
Console.Write("<!--{0}-->", reader.Value)
Case XmlNodeType.XmlDeclaration
Console.Write("<?xml version='1.0'?>")
Case XmlNodeType.Document
Case XmlNodeType.DocumentType
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value)
Case XmlNodeType.EntityReference
Console.Write(reader.Name)
Case XmlNodeType.EndElement
Console.Write("</{0}>", reader.Name)
End Select
End While
Finally
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub 'Main ' End class
End Class 'Sample
using System;
using System.IO;
using System.Xml;
public class Sample
{
private const String filename = "items.xml";
public static void Main()
{
XmlTextReader reader = null;
try
{
// Load the reader with the data file and ignore
// all white space nodes.
reader = new XmlTextReader(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
// Parse the file and display each of the nodes.
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
Console.Write("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}
}
}
finally
{
if (reader != null)
reader.Close();
}
}
} // End class
La salida del ejemplo revela la asignación de los datos a los tipos de nodo.
Salida
<?xml version='1.0'?><!--This is a sample XML document --><!DOCTYPE Items [<!ENTITY number "123">]<Items><Item>Test with an entity: 123</Item><Item>test with a child element <more> stuff</Item><Item>test with a CDATA section <![CDATA[<456>]]> def</Item><Item>Test with a char entity: A</Item><--Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>
Tomando la entrada una línea a la vez y usando la salida generada a partir del código, puede usar la tabla siguiente para analizar qué prueba de nodo generó qué líneas de salida, entendiendo así qué datos XML se convirtieron en qué tipo de nodo.
Entrada | Salida | Prueba de tipo de nodo |
---|---|---|
<?xml version="1.0"?> | <?xml version='1.0'?> | XmlNodeType.XmlDeclaration |
<-- Se trata de un documento XML de ejemplo:> | <--Este es un documento XML de ejemplo:> | XmlNodeType.Comment |
<! DOCTYPE Items [<! Número de ENTIDAD "123">]> | <! DOCTYPE Items [<! Número de ENTIDAD "123">] | XmlNodeType.DocumentType |
<Elementos> | <Elementos> | XmlNodeType.Element |
<Artículo> | <Artículo> | XmlNodeType.Element |
Prueba con una entidad: &number; | Prueba con una entidad: 123 | XmlNodeType.Text |
</Artículo> | </Artículo> | XmlNodeType.EndElement |
<Artículo> | <Artículo> | XmNodeType.Element |
prueba con un elemento secundario | prueba con un elemento secundario | XmlNodeType.Text |
<más> | <más> | XmlNodeType.Element |
embutir | embutir | XmlNodeType.Text |
</Artículo> | </Artículo> | XmlNodeType.EndElement |
<Artículo> | <Artículo> | XmlNodeType.Element |
prueba con una sección CDATA | prueba con una sección CDATA | XmlTest.Text |
<! [CDATA[<456>]]> | <! [CDATA[<456>]]> | XmlTest.CDATA |
Def | Def | XmlNodeType.Text |
</Artículo> | </Artículo> | XmlNodeType.EndElement |
<Artículo> | <Artículo> | XmlNodeType.Element |
Prueba con una entidad de carácter: A | Prueba con una entidad de carácter: A | XmlNodeType.Text |
</Artículo> | </Artículo> | XmlNodeType.EndElement |