Partager via


Utilisation des classes XPathNavigator et XPathNodeIterator

Pour accéder aux données XML dans les sources de données du modèle de formulaire et les manipuler, un grand nombre de membres du modèle objet avec code managé fourni par l'espace de noms Microsoft.Office.InfoPath créent ou se voient attribuer une instance de la classe XPathNavigator de l'espace de noms System.Xml.XPath. Après avoir accédé à un objet XPathNavigator retourné par un membre du modèle objet InfoPath, vous pouvez utiliser les propriétés et les méthodes de la classe XPathNavigator pour travailler avec les données.

Le membre le plus couramment utilisé de l'espace de noms Microsoft.Office.InfoPath qui utilise la classe XPathNavigator est la méthode CreateNavigator de la classe DataSource qui vous permet d'utiliser les données stockées représentées par un objet DataSource. La méthode CreateNavigator crée un objet XPathNavigator placé à la racine de la source de données représentée par l'objet DataSource.

Remarque

Si vous avez l'habitude d'utiliser MSXML5 à partir du script pour travailler avec des données dans Microsoft InfoPath 2003, vous pouvez considérer la méthode CreateNavigator en remplacement de la propriété DOM de l'objet DataObject.

Par exemple, le code suivant illustre la création d'un objet XPathNavigator placé à la racine d'une source de données nommée CityList (Liste des villes) à l'aide de la méthode CreateNavigator, puis l'utilisation de la propriété OuterXml de la classe XPathNavigator pour afficher le code XML retourné dans une zone de message.

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())

Membres du modèle objet InfoPath qui utilisent les classes XPathNavigator et XPathNodeIterator

Le tableau suivant recense les membres de l'espace de noms Microsoft.Office.InfoPath qui utilisent la classe XPathNavigator pour accéder aux données XMSL, les manipuler ou les envoyer.

Classe parent Membre

AdoQueryConnection

Méthode BuildSqlFromXmlNodes

AdoSubmitConnection

Méthode BuildSqlFromXmlNodes

ClickedEventArgs

Propriété Source

ContextChangedEventArgs

Propriété Context

DataSource

Méthode CreateNavigator

Méthode GetNamedNodeProperty

Méthode SetNamedNodeProperty

EmailSubmitConnection

Méthode Execute

FileQueryConnection

Méthode Execute

FileSubmitConnection

Méthode Execute

FormError

Propriété Site

FormErrorCollection

Méthodes Add

FormTemplate

Propriété Manifest

MergeEventArgs

Propriété Xml

SharepointListQueryConnection

Méthode Execute

Signature

Propriété SignatureBlockXmlNode

SignedDataBlock

Propriété SignatureContainer

View

Méthodes GetContextNodes

Méthodes SelectNodes

Méthodes SelectText

WebServiceConnection

Méthode Execute

Méthode GenerateDataSetDiffGram

XmlEventArgs

Propriété OldParent

Propriété Site

XmlForm

Propriété MainDataSource qui retourne un objet DataSource qui à son tour fournit la méthode CreateNavigator permettant de créer un objet XPathNavigator placé à la racine du document XML sous-jacent du formulaire (source de données principale).

Méthode MergeForm

XmlFormCollection

Méthode NewFromFormTemplate

XmlValidatingEventArgs

Méthodes ReportError

Outre les membres du modèle objet InfoPath qui retournent ou acceptent un objet XPathNavigator, les méthodes suivantes retournent une instance de la classe XPathNodeIterator de l'espace de noms System.Xml.XPath pour parcourir les nœuds XML des éléments qui sont spécifiés ou sélectionnés dans un affichage.

Classe parent Membre

View

Méthodes GetContextNodes

Méthode GetSelectedNodes

Pour plus d'informations sur les propriétés et les méthodes des classes XPathNavigator et XPathNodeIterator, effectuez une recherche dans la documentation de référence .NET Framework.

Utilisation des classes XPathNavigator et XPathNodeIterator pour travailler avec des données sélectionnées dans un affichage

L'exemple suivant utilise les membres des classes XPathNavigator et XPathNodeIterator pour utiliser des données de formulaires dans la séquence suivante :

  1. La méthode CreateNavigator de la classe DataSource permet de créer une variable d'objet XPathNavigator appelée Ligne1TableauExtensible, placée par défaut à la racine du document XML sous-jacent du formulaire (source de données principale).

  2. La méthode SelectSingleNode de la classe XPathNavigator permet de déplacer l'objet XPathNavigator vers la première ligne d'un contrôle Tableau extensible rattaché à groupe2 dans la source de données.

  3. La variable de l'objet Ligne1TableauExtensible est transmise à la méthode SelectNodes de la classe View pour sélectionner les nœuds de la ligne.

  4. Une variable d'objet XPathNodeIterator nommée Nœuds sélectionnés est déclarée, et la méthode GetSelectedNodes de la classe View est utilisée pour compléter l'objet XPathNodeIterator avec les nœuds sélectionnés.

  5. La propriété Count de la classe XPathNodeIterator permet d'afficher le nombre de nœuds contenus dans la variable d'objet NœudsSélectionnés.

  6. Une boucle For/Each permet de parcourir les nœuds de la variable d'objet NœudsSélectionnés et d'afficher des informations sur chaque nœud à l'aide des propriétés Name, InnerXml et Value de la classe 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