Condividi tramite


Procedura: Utilizzare le classi XPathNavigator e XPathNodeIterator

Per accedere ai dati XML nelle origini dati del modello di modulo e modificarli, molti membri del modello a oggetti con codice gestito inclusi nello spazio dei nomi Microsoft.Office.InfoPath creano un'istanza della classe XPathNavigator dello spazio dei nomi System.Xml.XPath. In alternativa, è possibile passare l'istanza a tali membri. Dopo l'accesso a un oggetto XPathNavigator restituito da un membro del modello a oggetti di InfoPath, è possibile utilizzare i dati tramite le proprietà e i metodi della classe XPathNavigator.

Il membro più comune dello spazio dei nomi Microsoft.Office.InfoPath che utilizza la classe XPathNavigator è il metodo CreateNavigator della classe DataSource, che consente di utilizzare i dati memorizzati rappresentati da un oggetto DataSource. Il metodo CreateNavigator crea un oggetto XPathNavigator posizionato nel nodo principale dell'origine dati rappresentata dall'oggetto DataSource.

Nota:

Gli utenti esperti nell'implementazione di MSXML5 dallo script per l'utilizzo dei dati di Microsoft InfoPath 2003 possono applicare il metodo CreateNavigator in sostituzione della proprietà DOM di DataObject.

Nell'esempio seguente viene illustrata la creazione di un oggetto XPathNavigator posizionato nel nodo principale di un'origine dati denominata "CityList" tramite il metodo CreateNavigator e quindi viene utilizzata la proprietà OuterXml della classe XPathNavigator per visualizzare i dati XML restituiti in una finestra di messaggio.

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

Membri del modello a oggetti di InfoPath che utilizzano le classi XPathNavigator e XPathNodeIterator

Nella tabella seguente è disponibile un riepilogo di tutti i membri dello spazio dei nomi Microsoft.Office.InfoPath che utilizzano la classe XPathNavigator per accedere ai dati XML, modificarli o inviarli.

Classe padre Membro

AdoQueryConnection

Metodo BuildSqlFromXmlNodes

AdoSubmitConnection

Metodo BuildSqlFromXmlNodes

ClickedEventArgs

Proprietà Source

ContextChangedEventArgs

Proprietà Context

DataSource

Metodo CreateNavigator

Metodo GetNamedNodeProperty

Metodo SetNamedNodeProperty

EmailSubmitConnection

Metodo Execute

FileQueryConnection

Metodo Execute

FileSubmitConnection

Metodo Execute

FormError

Proprietà Site

FormErrorCollection

Metodi Add

FormTemplate

Proprietà Manifest

MergeEventArgs

Proprietà Xml

SharepointListQueryConnection

Metodo Execute

Signature

Proprietà SignatureBlockXmlNode

SignedDataBlock

Proprietà SignatureContainer

View

Metodi GetContextNodes

Metodi SelectNodes

Metodi SelectText

WebServiceConnection

Metodo Execute

Metodo GenerateDataSetDiffGram

XmlEventArgs

Proprietà OldParent

Proprietà Site

XmlForm

Proprietà MainDataSource, che restituisce un oggetto DataSource il quale genera a sua volta il metodo CreateNavigator per la creazione di un oggetto XPathNavigator posizionato nel nodo principale del documento XML sottostante del modulo (origine dati principale)

Metodo MergeForm

XmlFormCollection

Metodo NewFromFormTemplate

XmlValidatingEventArgs

Metodi ReportError

Oltre ai membri del modello a oggetti di InfoPath che restituiscono o accettano un oggetto XPathNavigator, i metodi seguenti restituiscono un'istanza della classe XPathNodeIterator dello spazio dei nomi System.Xml.XPath per l'iterazione nei nodi XML degli elementi specificati o selezionati in una visualizzazione.

Classe padre Membro

View

Metodi GetContextNodes

Metodo GetSelectedNodes

Per informazioni sulle proprietà e sui metodi delle classi XPathNavigator e XPathNodeIterator, vedere la documentazione della guida di riferimento a .NET Framework.

Utilizzo delle classi XPathNavigator e XPathNodeIterator per i dati selezionati in una visualizzazione

Nell'esempio seguente vengono utilizzati nella sequenza indicata i membri di entrambe le classi XPathNavigator e XPathNodeIterator per i dati del modulo.

  1. Il metodo CreateNavigator della classe DataSource viene utilizzato per creare una variabile oggetto XPathNavigator denominata repeatingTableRow1, posizionata per impostazione predefinita nel nodo principale del documento XML sottostante del modulo (origine dati principale).

  2. Il metodo SelectSingleNode della classe XPathNavigator viene utilizzato per spostare la posizione dell'oggetto XPathNavigator in corrispondenza della prima riga di un controllo Tabella ripetuta (Repeating Table) associato a group2 nell'origine dati.

  3. La variabile oggetto repeatingTableRow1 viene passata al metodo SelectNodes della classe View per selezionare i nodi di tale riga.

  4. Viene dichiarata una variabile oggetto XPathNodeIterator denominata selectedNodes e viene utilizzato il metodo GetSelectedNodes della classe View per popolare l'oggetto XPathNodeIterator con i nodi selezionati.

  5. La proprietà Count della classe XPathNodeIterator viene utilizzata per visualizzare il numero di nodi contenuti nella variabile oggetto selectedNodes.

  6. Viene utilizzato un ciclo For/Each per eseguire l'iterazione nei nodi della variabile oggetto selectedNodes e visualizzare informazioni su ogni nodo utilizzando le proprietà Name, InnerXml e Value della 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