Практическое руководство. Работа с классами XPathNavigator и XPathNodeIterator
Для получения доступа к XML-данным, расположенным в источниках данных шаблона формы, а также для управления этими XML-данными доступен широкий спектр элементов объектной модели с управляемым кодом, которые предоставляются пространством имен Microsoft.Office.InfoPath и могут быть созданы или переданы экземпляром класса XPathNavigator пространства имен System.Xml.XPath. После получения доступа к объекту XPathNavigator, возвращенному элементом объектной модели InfoPath, можно использовать свойства и методы класса XPathNavigator для работы с данными.
Наиболее часто используемый элемент пространства имен Microsoft.Office.InfoPath, который применяет класс XPathNavigator, - это метод CreateNavigator класса DataSource, позволяющий работать с сохраненными данными, предоставленными объектом DataSource. Метод CreateNavigator создает объект XPathNavigator, располагающийся в корне источника данных, представленного объектом DataSource.
Заметка |
---|
При наличии знаний по использованию MSXML5 из сценария для работы с данными в Microsoft InfoPath 2003 можно рассмотреть вариант применения метода CreateNavigator в качестве замены свойства DOM для DataObject. |
Например, в следующем примере кода описано создание объекта XPathNavigator, расположенного в корне источника данных "CityList", с помощью метода CreateNavigator с последующим использованием свойства OuterXml класса XPathNavigator для отображения 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())
Элементы объектной модели InfoPath, использующие классы XPathNavigator и XPathNodeIterator
В следующей таблице приведены обобщенные сведения обо всех элементах пространства имен Microsoft.Office.InfoPath, использующего класс XPathNavigator для доступа к XML-данным, управления ими и отправки их.
Родительский класс | Элемент |
---|---|
Метод BuildSqlFromXmlNodes |
|
BuildSqlFromXmlNodesM:Microsoft.Office.InfoPath.AdoQueryConnection.BuildSqlFromXmlNodes(System.Xml.XPath.XPathNavigator) |
|
Свойство Source |
|
ContextP:Microsoft.Office.InfoPath.FormError.Site |
|
DataSource |
CreateNavigatorM:Microsoft.Office.InfoPath.FormErrorCollection.DeleteAll |
GetNamedNodePropertyM:Microsoft.Office.InfoPath.AdoQueryConnection.BuildSqlFromXmlNodes(System.Xml.XPath.XPathNavigator) |
|
SetNamedNodePropertyM:Microsoft.Office.InfoPath.AdoQueryConnection.BuildSqlFromXmlNodes(System.Xml.XPath.XPathNavigator) |
|
ExecuteM:Microsoft.Office.InfoPath.AdoQueryConnection.BuildSqlFromXmlNodes(System.Xml.XPath.XPathNavigator) |
|
ExecuteM:Microsoft.Office.InfoPath.AdoQueryConnection.BuildSqlFromXmlNodes(System.Xml.XPath.XPathNavigator) |
|
ExecuteM:Microsoft.Office.InfoPath.AdoQueryConnection.BuildSqlFromXmlNodes(System.Xml.XPath.XPathNavigator) |
|
Свойство Site |
|
Методы Add |
|
ManifestP:Microsoft.Office.InfoPath.FormError.Site |
|
XmlP:Microsoft.Office.InfoPath.ClickedEventArgs.Source |
|
ExecuteM:Microsoft.Office.InfoPath.AdoQueryConnection.BuildSqlFromXmlNodes(System.Xml.XPath.XPathNavigator) |
|
SignatureBlockXmlNodeP:Microsoft.Office.InfoPath.FormError.Site |
|
SignatureContainerP:Microsoft.Office.InfoPath.Window.WindowState |
|
GetContextNodesM:Microsoft.Office.InfoPath.FormErrorCollection.Add(System.Xml.XPath.XPathNavigator,System.String,System.String) |
|
SelectNodesM:Microsoft.Office.InfoPath.FormErrorCollection.Add(System.Xml.XPath.XPathNavigator,System.String,System.String) |
|
SelectTextM:Microsoft.Office.InfoPath.FormErrorCollection.Add(System.Xml.XPath.XPathNavigator,System.String,System.String) |
|
ExecuteM:Microsoft.Office.InfoPath.UserPermissionCollection.Remove(System.String) |
|
GenerateDataSetDiffGramM:Microsoft.Office.InfoPath.Window.Activate |
|
OldParentP:Microsoft.Office.InfoPath.ClickedEventArgs.Source |
|
SiteP:Microsoft.Office.InfoPath.ClickedEventArgs.Source |
|
Свойство MainDataSource, возвращающее объект DataSource, который, в свою очередь, предоставляет метод CreateNavigator для создания объекта XPathNavigator, расположенного в корне базового XML-документа формы (основного источника данных). |
|
MergeFormM:Microsoft.Office.InfoPath.AdoQueryConnection.BuildSqlFromXmlNodes(System.Xml.XPath.XPathNavigator) |
|
NewFromFormTemplateM:Microsoft.Office.InfoPath.UserPermissionCollection.Remove(System.String) |
|
ReportErrorM:Microsoft.Office.InfoPath.FormErrorCollection.Add(System.Xml.XPath.XPathNavigator,System.String,System.String) |
В дополнение к элементам объектной модели InfoPath, возвращающим или принимающим объект XPathNavigator, следующие методы возвращают экземпляр класса XPathNodeIterator пространства имен System.Xml.XPath для прохода по XML-узлам элементов, указанных или выбранных в представлении.
Родительский класс | Элемент |
---|---|
View |
GetContextNodesM:Microsoft.Office.InfoPath.FormErrorCollection.Add(System.Xml.XPath.XPathNavigator,System.String,System.String) |
GetSelectedNodesM:Microsoft.Office.InfoPath.Window.Activate |
Сведения о свойствах и методах классов XPathNavigator и XPathNodeIterator см. в справочной документации .NET Framework.
Использование классов XPathNavigator и XPathNodeIterator для работы с данными, выбранными в представлении
В следующем примере используются элементы обоих классов XPathNavigator и XPathNodeIterator для работы с данными форм в следующей последовательности:
Метод CreateNavigator класса DataSource используется для создания объектной переменной XPathNavigator с именем repeatingTableRow1, которая по умолчанию располагается в корне базового XML-документа формы (основного источника данных).
Метод SelectSingleNode класса XPathNavigator используется для смещения позиции объекта XPathNavigator в первую строку элемента управления Повторяющаяся таблица, связанного с группой group2 в источнике данных.
Объектная переменная repeatingTableRow1 передается методу SelectNodes класса View для выбора узлов в этой строке.
Объявляется объектная переменная XPathNodeIterator с именем selectedNodes и используется метод GetSelectedNodes класса View для заполнения объекта XPathNodeIterator выбранными узлами.
Свойство Count класса XPathNodeIterator используется для отображения количества узлов, содержащихся в объектной переменной selectedNodes.
Цикл For/Each используется для прохода по узлам объектной переменной selectedNodes и отображения сведений о каждом узле с помощью свойств Name, InnerXml и Value класса 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