[方法] 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 メソッドを DataObject の DOM プロパティに代わるものと考えることができます。 |
たとえば、次のコード サンプルでは、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 名前空間のすべてのメンバの概要を示します。
親クラス | メンバ |
---|---|
BuildSqlFromXmlNodes メソッド |
|
BuildSqlFromXmlNodes メソッド |
|
Source プロパティ |
|
Context プロパティ |
|
DataSource |
CreateNavigator メソッド |
GetNamedNodeProperty メソッド |
|
SetNamedNodeProperty メソッド |
|
Execute メソッド |
|
Execute メソッド |
|
Execute メソッド |
|
Site プロパティ |
|
Add メソッド |
|
Manifest プロパティ |
|
Xml プロパティ |
|
Execute メソッド |
|
SignatureBlockXmlNode プロパティ |
|
SignatureContainer プロパティ |
|
GetContextNodes メソッド |
|
SelectNodes メソッド |
|
SelectText メソッド |
|
Execute メソッド |
|
OldParent プロパティ |
|
Site プロパティ |
|
MainDataSource プロパティ。DataSource オブジェクトを返します。このオブジェクトは、フォームの基になる XML ドキュメント (メイン データ ソース) のルートに置かれる XPathNavigator オブジェクトを作成する CreateNavigator メソッドを備えます。 |
|
MergeForm メソッド |
|
NewFromFormTemplate メソッド |
|
ReportError メソッド |
XPathNavigator オブジェクトを返すか受け取る InfoPath オブジェクト モデル メンバに加え、次のメソッドでは、ビューで指定または選択された項目の XML ノードに対して反復処理を行うため、System.Xml.XPath 名前空間の XPathNodeIterator クラスのインスタンスを返します。
親クラス | メンバ |
---|---|
View |
GetContextNodes メソッド |
GetSelectedNodes メソッド |
XPathNavigator クラスと XPathNodeIterator クラスのプロパティとメソッドの詳細については、.NET Framework リファレンス ドキュメントを検索してください。
XPathNavigator クラスと XPathNodeIterator クラスを使用して、ビューで選択されたデータを操作する
次の例では、XPathNavigator クラスと XPathNodeIterator クラスのメンバを使用して、次のシーケンスのフォーム データを操作します。
DataSource クラスの CreateNavigator メソッドを使用して、repeatingTableRow1 という名前の XPathNavigator オブジェクト変数を作成します。このオブジェクト変数は、既定では、フォームの基になる XML ドキュメント (メイン データ ソース) のルートに置かれます。
XPathNavigator クラスの SelectSingleNode メソッドを使用して、XPathNavigator オブジェクトの位置を、データ ソースの group2 にバインドされた [繰り返しテーブル] コントロールの先頭行に移動します。
repeatingTableRow1 オブジェクト変数を View クラスの SelectNodes メソッドに渡し、その行のノードを選択します。
selectedNodes という名前の XPathNodeIterator オブジェクト変数を宣言し、View クラスの GetSelectedNodes メソッドを使用して、XPathNodeIterator オブジェクトに選択されたノードを入力します。
XPathNodeIterator クラスの Count プロパティを使用して、selectedNodes オブジェクト変数に含まれているノード数を表示します。
For/Each ループを使用して、selectedNodes オブジェクト変数のノードに対して反復処理を行い、XPathNavigator クラスの Name、InnerXml、および 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