Vorgehensweise: Arbeiten mit den Klassen "XPathNavigator" und "XPathNodeIterator"

Viele Member des Objektmodells mit verwaltetem Code, das vom Microsoft.Office.InfoPath-Namespace bereitgestellt wird, erstellen entweder eine Instanz der XPathNavigator-Klasse des System.Xml.XPath-Namespace, oder diese Instanz wird an sie übergeben, um auf die XML-Daten in Formularvorlagen-Datenquellen zuzugreifen und sie zu bearbeiten. Wenn Sie Zugriff auf ein XPathNavigator-Objekt erhalten haben, das von einem InfoPath-Objektmodellmember zurückgegeben wird, können Sie die Eigenschaften und Methoden der XPathNavigator-Klasse verwenden, um mit den Daten zu arbeiten.

Der am häufigsten verwendete Member des Microsoft.Office.InfoPath-Namespace, der die XPathNavigator-Klasse verwendet, ist die CreateNavigator-Methode der DataSource-Klasse, die es Ihnen ermöglicht, mit den gespeicherten Daten zu arbeiten, die durch ein DataSource-Objekt dargestellt werden. Von der CreateNavigator-Methode wird ein XPathNavigator-Objekt am Stamm der Datenquelle erstellt, die vom DataSource-Objekt dargestellt wird.

Hinweis:

Wenn Sie mit der Verwendung von MSXML5 aus Skript zum Arbeiten mit Daten in Microsoft InfoPath 2003 vertraut sind, können Sie sich die CreateNavigator-Methode als Ersatz für die DOM-Eigenschaft von DataObject vorstellen.

Im folgenden Codebeispiel wird z. B. gezeigt, wie ein XPathNavigator-Objekt am Stamm einer Datenquelle mit dem Namen "CityList" mithilfe der CreateNavigator-Methode erstellt wird und dann die OuterXml-Eigenschaft der XPathNavigator-Klasse verwendet wird, um den zurückgegebenen XML-Code in einem Meldungsfeld anzuzeigen.

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

InfoPath-Objektmodellmember, von denen die Klassen "XPathNavigator" und "XPathNodeIterator" verwendet werden

Die folgende Tabelle enthält eine Zusammenfassung aller Member des Microsoft.Office.InfoPath-Namespace, von denen die XPathNavigator-Klasse verwendet wird, um auf XML-Daten zuzugreifen, sie zu bearbeiten oder zu senden.

Übergeordnete Klasse Member

AdoQueryConnection

BuildSqlFromXmlNodes-Methode

AdoSubmitConnection

BuildSqlFromXmlNodes-Methode

ClickedEventArgs

Source-Eigenschaft

ContextChangedEventArgs

Context-Eigenschaft

DataSource

CreateNavigator-Methode

GetNamedNodeProperty-Methode

SetNamedNodeProperty-Methode

EmailSubmitConnection

Execute-Methode

FileQueryConnection

Execute-Methode

FileSubmitConnection

Execute-Methode

FormError

Site-Eigenschaft

FormErrorCollection

Add-Methoden

FormTemplate

Manifest-Eigenschaft

MergeEventArgs

Xml-Eigenschaft

SharepointListQueryConnection

Execute-Methode

Signature

SignatureBlockXmlNode-Eigenschaft

SignedDataBlock

SignatureContainer-Eigenschaft

View

GetContextNodes-Methoden

SelectNodes-Methoden

SelectText-Methoden

WebServiceConnection

Execute-Methode

GenerateDataSetDiffGram-Methode

XmlEventArgs

OldParent-Eigenschaft

Site-Eigenschaft

XmlForm

MainDataSource-Eigenschaft, die ein DataSource-Objekt zurückgibt, das wiederum die CreateNavigator-Methode zum Erstellen eines XPathNavigator-Objekts am Stamm des dem Formular zugrunde liegenden XML-Dokuments (Hauptdatenquelle) bereitstellt.

MergeForm-Methode

XmlFormCollection

NewFromFormTemplate-Methode

XmlValidatingEventArgs

ReportError-Methoden

Neben den InfoPath-Objektmodellmembern, die ein XPathNavigator-Objekt zurückgeben oder annehmen, geben die folgenden Methoden eine Instanz der XPathNodeIterator-Klasse des System.Xml.XPath-Namespace zum Durchlaufen der XML-Knoten von Elementen zurück, die in einer Ansicht angegeben oder ausgewählt werden.

Übergeordnete Klasse Member

View

GetContextNodes-Methoden

GetSelectedNodes-Methode

Weitere Informationen zu den Eigenschaften und Methoden der Klassen XPathNavigator und XPathNodeIterator finden Sie in der .NET Framework-Referenzdokumentation.

Verwenden der Klassen "XPathNavigator" und "XPathNodeIterator" für in einer Ansicht ausgewählte Daten

Im folgenden Beispiel werden Member der Klassen XPathNavigator und XPathNodeIterator für Formulardaten in der folgenden Reihenfolge verwendet:

  1. Die CreateNavigator-Methode der DataSource-Klasse dient zum Erstellen einer XPathNavigator-Objektvariablen mit dem Namen repeatingTableRow1, die sich standardmäßig am Stamm des dem Formular zugrunde liegenden XML-Dokuments (der Hauptdatenquelle) befindet.

  2. Die SelectSingleNode-Methode der XPathNavigator-Klasse dient zum Verschieben der Position des XPathNavigator-Objekts in die erste Zeile des Steuerelements Wiederholte Tabelle, das an group2 in der Datenquelle gebunden ist.

  3. Die repeatingTableRow1-Objektvariable wird an die SelectNodes-Methode der View-Klasse übergeben, um die Knoten in dieser Zeile auszuwählen.

  4. Eine XPathNodeIterator-Objektvariable mit dem Namen selectedNodes wird deklariert, und die GetSelectedNodes-Methode der View-Klasse wird verwendet, um das XPathNodeIterator-Objekt mit den ausgewählten Knoten aufzufüllen.

  5. Die Count-Eigenschaft der XPathNodeIterator-Klasse dient zum Anzeigen der Anzahl der Knoten, die in der selectedNodes-Objektvariablen enthalten sind.

  6. Eine For/Each-Schleife dient zum Durchlaufen der Knoten in der selectedNodes-Objektvariablen und zum Anzeigen von Informationen zu den einzelnen Knoten mithilfe der Eigenschaften Name, InnerXml und Value der XPathNavigator-Klasse.

// 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