방법: 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 네임스페이스의 모든 구성원을 보여 줍니다.
부모 클래스 | 구성원 |
---|---|
Source 속성 |
|
Context 속성 |
|
DataSource |
CreateNavigator 메서드 |
Execute 메서드 |
|
Execute 메서드 |
|
Execute 메서드 |
|
Site 속성 |
|
Add 메서드 |
|
Manifest 속성 |
|
Xml 속성 |
|
Execute 메서드 |
|
GetContextNodes 메서드 |
|
SelectNodes 메서드 |
|
SelectText 메서드 |
|
Execute 메서드 |
|
OldParent 속성 |
|
Site 속성 |
|
DataSource 개체를 반환하는 MainDataSource 속성. 이 개체는 다시 양식의 원본으로 사용하는 XML 문서(주 데이터 원본)의 루트에 있는 XPathNavigator 개체를 만들기 위한 CreateNavigator 메서드를 제공합니다. |
|
MergeForm 메서드 |
|
ReportError 메서드 |
XPathNavigator 개체를 반환하거나 허용하는 InfoPath 개체 모델 구성원 외에도 다음 메서드는 보기에서 지정하거나 선택한 항목의 XML 노드에 대해 반복하는 데 사용되는 System.Xml.XPath 네임스페이스의 XPathNodeIterator 클래스 인스턴스를 반환합니다.
부모 클래스 | 구성원 |
---|---|
View |
GetContextNodes 메서드 |
GetSelectedNodes 메서드 |
XPathNavigator 및 XPathNodeIterator 클래스의 속성과 메서드에 대한 자세한 내용을 보려면 .NET Framework 참조 설명서를 검색하십시오.
XPathNavigator 및 XPathNodeIterator 클래스를 사용하여 보기에서 선택한 데이터 작업
다음 예제에서는 XPathNavigator 및 XPathNodeIterator 클래스의 구성원을 사용하여 다음 시퀀스로 양식 데이터 작업을 수행합니다.
DataSource 클래스의 CreateNavigator 메서드를 사용하여 기본적으로 양식의 원본으로 사용하는 XML 문서(주 데이터 원본)의 루트에 있는 repeatingTableRow1이라는 XPathNavigator 개체 변수를 만듭니다.
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