Поделиться через


Работа с 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