Работа с MSXML5 и System.Xml с использованием объектной модели InfoPath 2003
Проекты шаблонов форм, работающие с объектной моделью InfoPath 2003, используют службы MSXML 5.0 для Microsoft Office для внутренней работы с XML. В управляемом коде зачастую проще воспользоваться поддержкой XML, предоставляемой пространством имен System.Xml в библиотеке классов .NET. Службы MSXML и файл System.Xml изначально не могут обмениваться объектами, поэтому при необходимости передать XML-данные между InfoPath и другим управляемым кодом требуется преобразовать XML-данные. Передавать XML-данные из объектов System.Xml в код формы InfoPath можно с помощью методик, приведенных в этой теме.
Чтобы использовать элементы пространства имен System.Xml в проекте с управляемым кодом, где используется объектная модель InfoPath 2003, необходимо добавить ссылку на System.Xml на вкладке .NET диалогового окна Добавить ссылку в Набор средств Microsoft Visual Studio для приложений (VSTA) или Visual Studio.
Примечания
Чтобы просмотреть справочные сведения по MSXML 5.0, откройте InfoPath и последовательно щелкните Справка Microsoft Office InfoPath, Найти и Справка разработчика InfoPath 2007.
Элементы объектной модели MSXML 5.0, реализуемые пространством имен Microsoft.Office.Interop.InfoPath.SemiTrust, нельзя назначать делегатам в коде формы для шаблонов форм с управляемым кодом.
Если выполняется обновление кода шаблона формы для использования объектной модели, предоставляемой элементами пространства имен Microsoft.Office.InfoPath, то по умолчанию используется System.Xml. Однако в этом случае необходимо вручную преобразовать весь код для использования новой объектной модели. Чтобы преобразовать шаблон формы для новой объектной модели, в категории Программирование диалогового окна Параметры формы щелкните Обновить объектную модель.
Загрузка полной модели XML DOM из файла System.Xml
В следующем примере кода демонстрируется загрузка полной модели XML DOM из кода System.Xml с помощью метода InfoPath CreateDOM и элементов служб MSXML 5.0 для Microsoft Office, реализуемых пространством имен Microsoft.Office.Interop.InfoPath.SemiTrust.
В следующих примерах требуется директива using или Imports для System.Xml в разделе объявлений модуля кода формы. Кроме того, поскольку метод Load класса XmlDocument требует разрешений System.Security.Permissions.FileIOPermission, необходимо настроить уровень безопасности шаблона формы как Полное доверие, используя категорию Безопасность и доверие диалогового окна Параметры формы.
// Create a System.Xml XmlDocument and load an XML file.
XmlDocument doc = new XmlDocument();
doc.Load("c:\\temp\\MyFile.xml");
// Create an MSXML DOM object.
IXMLDOMDocument newDoc = thisXDocument.CreateDOM();
// Load the DOM with the XML from the System.XML object.
newDoc.loadXML(doc.DocumentElement.OuterXml);
' Create a System.Xml XmlDocument and load an XML file.
Dim doc As XmlDocument = New XmlDocument()
doc.Load("c:\temp\MyFile.xml");
' Create an MSXML DOM object.
Dim newDoc As IXMLDOMDocument = thisXDocument.CreateDOM()
' Load the DOM with the XML from the System.XML object.
newDoc.loadXML(doc.DocumentElement.OuterXml)
Загрузка отдельного узла из файла System.Xml
В следующем примере приводится функция, демонстрирующая метод копирования отдельного узла из System.Xml. Элемент XmlElement использует реализованный метод MSXML 5.0 createNode.
В следующем примере требуется директива using или Imports для System.Xml в разделе объявлений модуля кода формы.
// This function takes a System.Xml XmlElement object and
// an MSXML IXMLDOMDocument object, and returns an MSXML
// IXMLDOMNode object that is a copy of the XmlElement object.
public IXMLDOMNode CloneSystemXmlElementToMsxml(
XmlElement systemXmlElement, IXMLDOMDocument msxmlDocument)
{
IXMLDOMNode msxmlResultNode;
// Create a new element from the MSXML DOM using the same
// namespace as the XmlElement.
msxmlResultNode = msxmlDocument.createNode(
DOMNodeType.NODE_ELEMENT,
systemXmlElement.Name,
systemXmlElement.NamespaceURI);
// Set the element's value.
msxmlResultNode.text = systemXmlElement.Value.ToString();
return msxmlResultNode;
}
' This function takes a System.Xml XmlElement object and
' an MSXML IXMLDOMDocument object, and returns an MSXML
' IXMLDOMNode object that is a copy of the XmlElement object.
Public Function CloneSystemXmlElementToMsxml(_
XmlElement systemXmlElement, _
IXMLDOMDocument msxmlDocument) As IXMLDOMNode
Dim msxmlResultNode As IXMLDOMNode
' Create a new element from the MSXML DOM using the same
' namespace as the XmlElement.
msxmlResultNode = msxmlDocument.createNode(_
DOMNodeType.NODE_ELEMENT, _
systemXmlElement.Name, _
systemXmlElement.NamespaceURI)
' Set the element's value.
msxmlResultNode.text = systemXmlElement.Value.ToString()
Return msxmlResultNode
End Function