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 |
---|---|
Método BuildSqlFromXmlNodes |
|
Método BuildSqlFromXmlNodes |
|
Propiedad Source |
|
Propiedad Context |
|
DataSource |
Método CreateNavigator |
Método GetNamedNodeProperty |
|
Método SetNamedNodeProperty |
|
Método Execute |
|
Método Execute |
|
Método Execute |
|
Propiedad Site |
|
Métodos Add |
|
Propiedad Manifest |
|
Propiedad Xml |
|
Método Execute |
|
Propiedad SignatureBlockXmlNode |
|
Propiedad SignatureContainer |
|
Métodos GetContextNodes |
|
Métodos SelectNodes |
|
Métodos SelectText |
|
MétodoExecute |
|
Método GenerateDataSetDiffGram |
|
Propiedad OldParent |
|
Propiedad Site |
|
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 |
|
Método NewFromFormTemplate |
|
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:
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).
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.
La variable del objeto repeatingTableRow1 se pasa al método SelectNodes de la clase View para seleccionar los nodos de esa fila.
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.
La propiedad Count de la clase XPathNodeIterator se usa para mostrar el número de nodos que contiene la variable del objeto selectedNodes.
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