次の方法で共有


[方法] XPathNavigator クラスおよび XPathNodeIterator クラスを操作する方法

フォーム テンプレートのデータ ソースの XML データにアクセスし、操作するには、Microsoft.Office.InfoPath 名前空間によって提供されるマネージ コード オブジェクト モデルの多くのメンバで System.Xml.XPath 名前空間の XPathNavigator クラスのインスタンスを作成します。また、インスタンスが渡されることもあります。InfoPath オブジェクト モデル メンバから返される XPathNavigator オブジェクトにアクセスした後、XPathNavigator クラスのプロパティとメソッドを使用してデータを操作できます。

XPathNavigator クラスを利用する Microsoft.Office.InfoPath 名前空間のメンバの中で最もよく使用されるメンバは、DataSource クラスの CreateNavigator メソッドです。このメソッドを使用すると、DataSource オブジェクトで表される保存データを操作できます。CreateNavigator メソッドでは、DataSource オブジェクトで表されるデータ ソースのルートに置かれる XPathNavigator オブジェクトを作成します。

メモメモ :

スクリプトから MSXML5 を使用して Microsoft InfoPath 2003 のデータを操作する方法に慣れている場合は、CreateNavigator メソッドを DataObjectDOM プロパティに代わるものと考えることができます。

たとえば、次のコード サンプルでは、CreateNavigator メソッドを使用してデータ ソース "CityList" のルートに置かれる XPathNavigator オブジェクトを作成し、XPathNavigator クラスの OuterXml プロパティを使用して、返される XML をメッセージ ボックスに表示する方法を示します。

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

XPathNavigator クラスと XPathNodeIterator クラスを使用する InfoPath オブジェクト モデルのメンバ

次の表に、XPathNavigator クラスを利用して XML データのアクセス、操作、および送信を行う Microsoft.Office.InfoPath 名前空間のすべてのメンバの概要を示します。

親クラス メンバ

AdoQueryConnection

BuildSqlFromXmlNodes メソッド

AdoSubmitConnection

BuildSqlFromXmlNodes メソッド

ClickedEventArgs

Source プロパティ

ContextChangedEventArgs

Context プロパティ

DataSource

CreateNavigator メソッド

GetNamedNodeProperty メソッド

SetNamedNodeProperty メソッド

EmailSubmitConnection

Execute メソッド

FileQueryConnection

Execute メソッド

FileSubmitConnection

Execute メソッド

FormError

Site プロパティ

FormErrorCollection

Add メソッド

FormTemplate

Manifest プロパティ

MergeEventArgs

Xml プロパティ

SharepointListQueryConnection

Execute メソッド

Signature

SignatureBlockXmlNode プロパティ

SignedDataBlock

SignatureContainer プロパティ

View

GetContextNodes メソッド

SelectNodes メソッド

SelectText メソッド

WebServiceConnection

Execute メソッド

GenerateDataSetDiffGram メソッド

XmlEventArgs

OldParent プロパティ

Site プロパティ

XmlForm

MainDataSource プロパティ。DataSource オブジェクトを返します。このオブジェクトは、フォームの基になる XML ドキュメント (メイン データ ソース) のルートに置かれる XPathNavigator オブジェクトを作成する CreateNavigator メソッドを備えます。

MergeForm メソッド

XmlFormCollection

NewFromFormTemplate メソッド

XmlValidatingEventArgs

ReportError メソッド

XPathNavigator オブジェクトを返すか受け取る InfoPath オブジェクト モデル メンバに加え、次のメソッドでは、ビューで指定または選択された項目の XML ノードに対して反復処理を行うため、System.Xml.XPath 名前空間の XPathNodeIterator クラスのインスタンスを返します。

親クラス メンバ

View

GetContextNodes メソッド

GetSelectedNodes メソッド

XPathNavigator クラスと XPathNodeIterator クラスのプロパティとメソッドの詳細については、.NET Framework リファレンス ドキュメントを検索してください。

XPathNavigator クラスと XPathNodeIterator クラスを使用して、ビューで選択されたデータを操作する

次の例では、XPathNavigator クラスと XPathNodeIterator クラスのメンバを使用して、次のシーケンスのフォーム データを操作します。

  1. DataSource クラスの CreateNavigator メソッドを使用して、repeatingTableRow1 という名前の XPathNavigator オブジェクト変数を作成します。このオブジェクト変数は、既定では、フォームの基になる XML ドキュメント (メイン データ ソース) のルートに置かれます。

  2. XPathNavigator クラスの SelectSingleNode メソッドを使用して、XPathNavigator オブジェクトの位置を、データ ソースの group2 にバインドされた [繰り返しテーブル] コントロールの先頭行に移動します。

  3. repeatingTableRow1 オブジェクト変数を View クラスの SelectNodes メソッドに渡し、その行のノードを選択します。

  4. selectedNodes という名前の XPathNodeIterator オブジェクト変数を宣言し、View クラスの GetSelectedNodes メソッドを使用して、XPathNodeIterator オブジェクトに選択されたノードを入力します。

  5. XPathNodeIterator クラスの Count プロパティを使用して、selectedNodes オブジェクト変数に含まれているノード数を表示します。

  6. For/Each ループを使用して、selectedNodes オブジェクト変数のノードに対して反復処理を行い、XPathNavigator クラスの NameInnerXml、および Value プロパティを使用して各ノードに関する情報を表示します。

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