Modificación de nodos, contenido y valores en un documento XMLModifying Nodes, Content, and Values in an XML Document

Existen muchas formas de modificar los nodos y el contenido de un documento.There are many ways you can modify the nodes and content in a document. Puede realizar lo siguiente:You can:

  • Cambiar el valor de los nodos utilizando la propiedad Value.Change the value of nodes using the Value property.

  • Modificar un conjunto completo de nodos reemplazando los nodos por nodos nuevos.Modify an entire set of nodes by replacing the nodes with new nodes. Para ello, utilice la propiedad InnerXml.This is done using the InnerXml property.

  • Reemplazar los nodos existentes por nuevos nodos utilizando el método RemoveChild.Replace existing nodes with new nodes using the RemoveChild method.

  • Agregar caracteres adicionales a los nodos que heredan de la clase XmlCharacterData utilizando los métodos AppendData, InsertData o ReplaceData.Add additional characters to nodes that inherit from the XmlCharacterData class using the AppendData, InsertData, or ReplaceData methods.

  • Modificar el contenido quitando un intervalo de caracteres utilizando el método DeleteData en los tipos de nodos que heredan de XmlCharacterData.Modify the content by removing a range of characters using the DeleteData method on node types that inherit from XmlCharacterData.

Una técnica muy sencilla para cambiar el valor de un nodo consiste en utilizar node.Value = "new value";.A simple technique for changing the value of a node is to use 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.The following table lists the node types that this single line of code works on and exactly what data for that node type is changed.

Tipo de nodoNode type Datos cambiadosData changed
AtributoAttribute El valor del atributo.The value of the attribute.
CDATASectionCDATASection El contenido de CDATASection.The content of the CDATASection.
ComentarioComment El contenido del comentario.The content of the comment.
ProcessingInstructionProcessingInstruction El contenido, sin incluir el destino.The content, excluding the target.
TextoText El contenido del texto.The content of the text.
XmlDeclarationXmlDeclaration El contenido de la declaración, sin incluir el marcado <?xml y ?>.The content of the declaration, excluding the <?xml and ?> markup.
WhitespaceWhitespace El valor del espacio en blanco.The value of the white space. Puede establecer este valor en uno de los cuatro caracteres de espacio en blanco XML reconocidos: space, tab, CR o LF.You can set the value to be one of the four recognized XML white space characters: space, tab, CR, or LF.
SignificantWhitespaceSignificantWhitespace El valor del espacio en blanco significativo.The value of the significant white space. Puede establecer este valor en uno de los cuatro caracteres de espacio en blanco XML reconocidos: space, tab, CR o LF.You can set the value to be one of the four recognized XML white space characters: space, tab, CR, or 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.Any node type not listed in the table is not a valid node type to set a value on. Al establecer un valor en cualquier otro tipo de nodo, se inicia una InvalidOperationException.Setting a value on any other node type throws an InvalidOperationException.

La propiedad InnerXml cambia el marcado de los nodos secundarios del nodo actual.The InnerXml property changes the markup of the child nodes for the current node. Al establecer esta propiedad, los nodos secundarios se reemplazan por el contenido analizado de la cadena especificada.Setting this property replaces the child nodes with the parsed contents of the given string. El análisis se realiza en el contexto del espacio de nombres actual.The parsing is done in the current namespace context. Además, InnerXml quita las declaraciones de espacios de nombres redundantes.In addition, InnerXml removes redundant namespace declarations. Como resultado, las numerosas operaciones de corte y pegado no aumentan el tamaño del documento con declaraciones de espacios de nombres redundantes.As a result, numerous cut and paste operations do not increase the size of your document with redundant namespace declarations. 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.For a code example showing the effect of namespaces on the InnerXml operation, see the InnerXml property.

Al utilizar los métodos ReplaceData y RemoveChild, los métodos devuelven el nodo quitado o reemplazado.When using the ReplaceData and RemoveChild methods, the methods return the replaced or removed node. Luego, este nodo se puede volver a insertar en cualquier lugar del Modelo de objetos de documento (DOM) XML.This node can then be reinserted somewhere else in the XML Document Object Model (DOM). El método ReplaceData realiza dos comprobaciones de validación en el nodo que se va a insertar en el documento.The ReplaceData method does two validation checks on the node being inserted into the document. 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.The first check ensures that the node is becoming a child of a node that can have child nodes of its type. 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.The second check ensures that the node being inserted is not an ancestor of the node it is becoming a child of. Si se incumplen cualquiera de estas condiciones, se inicia una InvalidOperationException.Violating either of these conditions throws an InvalidOperationException.

Es válido agregar o quitar un nodo secundario de solo lectura de un nodo que se puede editar.It is valid to add or remove a read-only child from a node that can be edited. Sin embargo, cualquier intento de modificar ese nodo de solo lectura inicia una InvalidOperationException.However, attempts to modify the read-only node itself throws an InvalidOperationException. Pongamos como ejemplo la modificación de los nodos secundarios de un nodo XmlEntityReference.An example of this is modifying the children of an XmlEntityReference node. Los nodos secundarios son de solo lectura y no se pueden modificar.The children are read-only and cannot be modified. Cualquier intento de modificarlos inicia una InvalidOperationException.Any attempt to modify them throws an InvalidOperationException.

Vea tambiénSee also