Compartir a través de


Omitir contenido con XmlReader

Se puede omitir contenido de dos formas. La primera es llamar a un método que pasa directamente al contenido mediante el método MoveToContent. La otra forma es llamar directamente al método Skip, que omite los nodos secundarios del nodo actual.

Pasar directamente al contenido

Para pasar al contenido, emplee el método MoveToContent. Este método comprueba si el nodo actual es de contenido. Un nodo de contenido se define como aquél de tipo Text, CDATA, Element, EndElement, EntityReference o EndEntity. Si no se trata de un nodo de ninguno de los tipos anteriores, se omite y se pasa al siguiente nodo o al final del archivo. El método continúa omitiendo nodos hasta que encuentra uno de ese tipo o llega al final del archivo, y se detiene. En otras palabras, omite los tipos de nodo siguientes:

  • XmlDeclaration
  • ProcessingInstruction
  • DocumentType
  • Comment
  • Attribute
  • Whitespace
  • SignificantWhitespace

El uso de este tipo de exploración del contenido resulta más eficiente si la aplicación sólo desea el contenido, en lugar de llamar al método Read que mueve al sistema de lectura al nodo siguiente, forzar a la aplicación a probar el tipo de nodo, determinar si hay contenido que leer y, si es así, leerlo.

Si la aplicación se coloca en un nodo de atributo (attribute), al llamar al método MoveToContent se pasa la posición del nodo actual al elemento correspondiente a ese atributo. Si la aplicación ya está colocada en un nodo de contenido, la llamada al método MoveToContent le devuelve el valor de la propiedad NodeType. Estos comportamientos permiten a la aplicación omitir marcado XML aleatorio. Por ejemplo, considere la entrada XML siguiente:

<?xml version="1.0">
<!DOCTYPE price SYSTEM "abc">
<!––the price of the book –->
<price>123.4</price>

En el código siguiente se busca el elemento price "123.4" y se convierte su contenido de texto a un valor de tipo double:

If readr.MoveToContent() = XmlNodeType.Element And readr.Name = "price" Then
   _price = XmlConvert.ToDouble(readr.ReadString())
End If
[C#]
if (readr.MoveToContent() == XmlNodeType.Element && readr.Name =="price")
{
    _price = XmlConvert.ToDouble(readr.ReadString());
}

Otro ejemplo es el método MoveToContent, que se suele usar para buscar el nodo DocumentElement en un archivo XML. Suponiendo el siguiente archivo XML de entrada, denominado file.xml:

<?xml encoding="utf-8"?>
<!-- Can have comment and DOCTYPE nodes here to skip past here -->
<phone a="2" b="N">
<data>
   <d1>Data</d1>
   <d2>More Data</d2>
   <d3>Some More Data</d3>
</data>
</phone>

en el código siguiente se coloca el sistema de lectura en el nodo DocumentElement <phone>:

Dim doc as XmlDocument = New XmlDocument()
Dim treader as New XmlTextReader("file.xml")
treader.MoveToContent()        
[C#]
XmlDocument doc = new XmlDocument();
XmlTextReader treader = new XmlTextReader("file.xml");
treader.MoveToContent();

Omitir datos con el método Skip

El método Skip omite el elemento actual. Si el tipo de nodo es XmlNodeType.Element, al llamar al método Skip se omite todo el contenido y la etiqueta de final del elemento.

Por ejemplo, si se tiene el siguiente código XML:

<a name="facts" location="123">
<x/> 
abc 
<y/>
</a>
<b>
...
</b>

y se está colocado en el nodo <a> o en alguno de sus atributos, al llamar al método Skip se coloca en el nodo <b>. Si se está colocado en un nodo hoja, como x, o el nodo de texto abc, el método Skip pasa el nodo siguiente, lo que significa que en realidad se comporta igual que una llamada al método Read.

El método Skip aplica al contenido las reglas para usar un formato correcto.

Vea también

Leer XML con XmlReader | Ubicación del nodo actual en XmlReader | Configuración de propiedades en XmlReader | Comparación de objetos mediante XmlNameTable con XmlReader | Leer atributos con XmlReader | Leer el contenido de elementos y atributos | Lectura y expansión de EntityReference | Comparar XmlReader con el sistema de lectura SAX | Leer datos XML con XmlTextReader | Leer árboles de nodos con XmlNodeReader | Validar XML con XmlValidatingReader | Creación de sistemas de lectura XML personalizados | XmlReader (Clase) | XmlReader (Miembros) | XmlNodeReader (Clase) | XmlNodeReader (Miembros) | XmlTextReader (Clase) | XmlTextReader (Miembros) | XmlValidatingReader (Clase) | XmlValidatingReader