Compartir a través de


Cómo: Trabajar con las clases XPathNavigator y XPathNodeIterator

Para tener acceso y manipular los datos XML de los orígenes de datos de la plantilla de formulario, muchos miembros del modelo de objetos de código administrado proporcionado por el espacio de nombres Microsoft.Office.InfoPath crean o se les puede pasar una instancia de la clase XPathNavigator del espacio de nombres System.Xml.XPath. Una vez que tiene acceso a un objeto XPathNavigator devuelto por un miembro del modelo de objetos de InfoPath, puede usar las propiedades y los métodos de la clase XPathNavigator para trabajar con los datos.

El miembro más utilizado del espacio de nombres Microsoft.Office.InfoPath que utiliza la clase XPathNavigator es el método CreateNavigator de la clase DataSource, que permite trabajar con los datos almacenados representados por un objeto DataSource. El método CreateNavigator crea un objeto XPathNavigator situado en la raíz del origen de datos representado por el objeto DataSource.

Nota

Si está familiarizado con el uso de MSXML5 para trabajar con datos en Microsoft InfoPath 2003, puede considerar el método CreateNavigator como un reemplazo de la propiedad DOM de DataObject.

Por ejemplo, en el siguiente ejemplo de código se muestra cómo crear un objeto XPathNavigator situado en la raíz del origen de datos denominado "CityList" usando el método CreateNavigator y, a continuación, la propiedad OuterXml de la clase XPathNavigator para mostrar el XML devuelto en un cuadro de mensaje.

XPathNavigator myNavigator = 
   this.DataSources["CityList"].CreateNavigator();
MessageBox.Show("Data source XML: " + myNavigator.OuterXml.ToString());
Dim myNavigator As XPathNavigator  = 
   Me.DataSources("CityList").CreateNavigator()
MessageBox.Show("Data source XML: " & myNavigator.OuterXml.ToString())

Miembros del modelo de objetos de InfoPath que usan las clases XPathNavigator y XPathNodeIterator

La tabla siguiente ofrece un resumen de todos los miembros del espacio de nombres Microsoft.Office.InfoPath que usan la clase XPathNavigator para tener acceso, manipular o enviar datos XML.

Clase primaria Miembro

AdoQueryConnection

Método BuildSqlFromXmlNodes

AdoSubmitConnection

Método BuildSqlFromXmlNodes

ClickedEventArgs

Propiedad Source

ContextChangedEventArgs

Propiedad Context

DataSource

Método CreateNavigator

Método GetNamedNodeProperty

Método SetNamedNodeProperty

EmailSubmitConnection

Método Execute

FileQueryConnection

Método Execute

FileSubmitConnection

Método Execute

FormError

Propiedad Site

FormErrorCollection

Métodos Add

FormTemplate

Propiedad Manifest

MergeEventArgs

Propiedad Xml

SharepointListQueryConnection

Método Execute

Signature

Propiedad SignatureBlockXmlNode

SignedDataBlock

Propiedad SignatureContainer

View

Métodos GetContextNodes

Métodos SelectNodes

Métodos SelectText

WebServiceConnection

MétodoExecute

Método GenerateDataSetDiffGram

XmlEventArgs

Propiedad OldParent

Propiedad Site

XmlForm

Propiedad MainDataSource, que devuelve un objeto DataSource que, a su vez, ofrece el método CreateNavigator para crear un objeto XPathNavigator situado en la raíz del documento XML subyacente del formulario (origen de datos principal).

Método MergeForm

XmlFormCollection

Método NewFromFormTemplate

XmlValidatingEventArgs

Métodos ReportError

Además de los miembros del modelo de objetos de InfoPath que devuelven o aceptan un objeto XPathNavigator, los métodos siguientes devuelven una instancia de la clase XPathNodeIterator del espacio de nombres System.Xml.XPath para recorrer en iteración los nodos XML de los elementos especificados o seleccionados en una vista.

Clase primaria Miembro

View

Métodos GetContextNodes

Método GetSelectedNodes

Para obtener más información sobre las propiedades y los métodos de las clases XPathNavigator y XPathNodeIterator, busque en la documentación de referencia de .NET Framework.

Uso de las clases XPathNavigator y XPathNodeIterator para trabajar con los datos seleccionados en una vista

En el ejemplo siguiente, se usan los miembros de las clases XPathNavigator y XPathNodeIterator para trabajar con los datos en la secuencia siguiente:

  1. El método CreateNavigator de la clase DataSource se usa para crear una variable del objeto XPathNavigator denominada repeatingTableRow1, que de manera predeterminada se sitúa en la raíz del documento XML subyacente del formulario (el origen de datos principal).

  2. El método SelectSingleNode de la clase XPathNavigator se usa para mover la posición del objeto XPathNavigator a la primera fila de un control Tabla extensible enlazado al grupo2 en el origen de datos.

  3. La variable del objeto repeatingTableRow1 se pasa al método SelectNodes de la clase View para seleccionar los nodos de esa fila.

  4. Se declara una variable del objeto XPathNodeIterator denominada selectedNodes y el método GetSelectedNodes de la clase View se usa para rellenar el objeto XPathNodeIterator con los nodos seleccionados.

  5. La propiedad Count de la clase XPathNodeIterator se usa para mostrar el número de nodos que contiene la variable del objeto selectedNodes.

  6. Se usa un bucle For/Each para recorrer en iteración los nodos de la variable del objeto selectedNodes y mostrar información sobre cada nodo usando las propiedades Name, InnerXml y Value de la clase XPathNavigator.

// Create XPathNavigator and specify XPath for nodes.
XPathNavigator repeatingTableRow1 = 
   MainDataSource.CreateNavigator().SelectSingleNode(
   "/my:myFields/my:group1/my:group2[1]", NamespaceManager);

// Select nodes in specified XPathNavigator.
CurrentView.SelectNodes(repeatingTableRow1);

// Get selected nodes.
XPathNodeIterator selectedNodes = 
   CurrentView.GetSelectedNodes();

// Display the count of selected nodes.
MessageBox.Show(selectedNodes.Count.ToString());

// Loop through collection and display information.
foreach (XPathNavigator selectedNode in selectedNodes)
{
   MessageBox.Show(selectedNode.Name);
   MessageBox.Show(selectedNode.InnerXml);
   MessageBox.Show(selectedNode.Value);
}
' Create XPathNavigator and specify XPath for nodes.
Dim repeatingTableRow1 As XPathNavigator  = _
   CreateNavigator().SelectSingleNode( _
   "/my:myFields/my:group1/my:group2[1]", NamespaceManager)

' Select nodes in specified XPathNavigator.
CurrentView.SelectNodes(repeatingTableRow1)

' Get selected nodes.
Dim selectedNodes As XPathNodeIterator = _
   CurrentView.GetSelectedNodes()

' Display the count of selected nodes.
MessageBox.Show(selectedNodes.Count.ToString())

' Loop through collection and display information.
Dim selectedNode As XPathNavigator
For Each selectedNode In selectedNodes
   MessageBox.Show(selectedNode.Name)
   MessageBox.Show(selectedNode.InnerXml)
   MessageBox.Show(selectedNode.Value)
Next