Modificación de nodos, contenido y valores en un documento XML

Existen muchas formas de modificar los nodos y el contenido de un documento. Puede realizar lo siguiente:

  • Cambiar el valor de los nodos utilizando la propiedad Value.

  • Modificar un conjunto completo de nodos reemplazando los nodos por nodos nuevos. Para ello, utilice la propiedad InnerXml.

  • Reemplazar los nodos existentes por nuevos nodos utilizando el método RemoveChild.

  • Agregar caracteres adicionales a los nodos que heredan de la clase XmlCharacterData utilizando los métodos AppendData, InsertData o ReplaceData.

  • Modificar el contenido quitando un intervalo de caracteres utilizando el método DeleteData en los tipos de nodos que heredan de XmlCharacterData.

Una técnica muy sencilla para cambiar el valor de un nodo consiste en utilizar node.Value = "new value";. En la siguiente tabla se enumeran los tipos de nodos en los que funciona esta línea de código y qué datos se cambian exactamente para ese tipo de nodo.

Tipo de nodo Datos cambiados
Atributo El valor del atributo.
CDATASection El contenido de CDATASection.
Comentario El contenido del comentario.
ProcessingInstruction El contenido, sin incluir el destino.
Text El contenido del texto.
XmlDeclaration El contenido de la declaración, sin incluir el marcado <?xml y ?>.
Whitespace El valor del espacio en blanco. Puede establecer este valor en uno de los cuatro caracteres de espacio en blanco XML reconocidos: space, tab, CR o LF.
SignificantWhitespace El valor del espacio en blanco significativo. Puede establecer este valor en uno de los cuatro caracteres de espacio en blanco XML reconocidos: space, tab, CR o LF.

Cualquier tipo de nodo que no se incluya en la tabla no es un tipo de nodo válido para establecer un valor en él. Al establecer un valor en cualquier otro tipo de nodo, se inicia una InvalidOperationException.

La propiedad InnerXml cambia el marcado de los nodos secundarios del nodo actual. Al establecer esta propiedad, los nodos secundarios se reemplazan por el contenido analizado de la cadena especificada. El análisis se realiza en el contexto del espacio de nombres actual. Además, InnerXml quita las declaraciones de espacios de nombres redundantes. Como resultado, las numerosas operaciones de corte y pegado no aumentan el tamaño del documento con declaraciones de espacios de nombres redundantes. Para ver un ejemplo de código que ilustra el efecto de los espacios de nombres en la operación InnerXml, vea la propiedad InnerXml.

Al utilizar los métodos ReplaceData y RemoveChild, los métodos devuelven el nodo quitado o reemplazado. Luego, este nodo se puede volver a insertar en cualquier lugar del Modelo de objetos de documento (DOM) XML. El método ReplaceData realiza dos comprobaciones de validación en el nodo que se va a insertar en el documento. En la primera comprobación se garantiza que el nodo se está convirtiendo en un nodo secundario que puede tener nodos secundarios de su tipo. En la segunda comprobación se garantiza que el nodo que se va a insertar no es un antecesor del nodo del que se va a convertir en secundario. Si se incumplen cualquiera de estas condiciones, se inicia una InvalidOperationException.

Es válido agregar o quitar un nodo secundario de solo lectura de un nodo que se puede editar. Sin embargo, cualquier intento de modificar ese nodo de solo lectura inicia una InvalidOperationException. Pongamos como ejemplo la modificación de los nodos secundarios de un nodo XmlEntityReference. Los nodos secundarios son de solo lectura y no se pueden modificar. Cualquier intento de modificarlos inicia una InvalidOperationException.

Vea también