Partager via


Utilisation de MSXML5 et de System.Xml avec le modèle objet InfoPath 2003

Les projets de modèle de formulaire utilisant le modèle objet InfoPath 2003 utilise MSXML 5.0 (Microsoft XML Core Services) pour Microsoft Office en interne pour travailler avec le XML. Dans le code managé, il est souvent plus simple d'utiliser le support XML fourni par l'espace de noms System.Xml dans la bibliothèque de classe .NET Framework. MSXML et System.Xml ne peuvent pas échanger d'objets de façon native. Vous devez donc pour transférer des données XML entre InfoPath et un autre code managé convertir ces données XML. Vous pouvez échanger des données XML depuis les objets System.Xml avec du code de formulaire InfoPath à l'aide des techniques décrites dans cette rubrique.

Pour utiliser les membres de l'espace de noms System.Xml dans un projet de code managé qui utilise le modèle objet InfoPath 2003, vous devez ajouter une référence à System.Xml dans l'onglet .NET de la boîte de dialogue Ajouter une référence ou Microsoft Visual Studio Tools for Applications (VSTA) or Visual Studio.

Remarques

  • Pour afficher des informations de référence sur MSXML 5.0, ouvrez InfoPath, cliquez sur Aide sur Microsoft Office InfoPath, cliquez sur Rechercher, puis cliquez sur Aide du développeur InfoPath 2007.

  • Les membres du modèle objet MSXML 5.0 qui sont inclus par l'espace de noms Microsoft.Office.Interop.InfoPath.SemiTrust ne peuvent pas être affectés à des délégués dans le code de formulaire de modèles de formulaires avec code managé.

  • Si vous mettez à jour le code de votre modèle de formulaire pour utiliser le modèle objet fourni par les membres de l'espace de noms Microsoft.Office.InfoPath, System.Xml est utilisé en mode natif. Toutefois, dans ce cas, vous devez convertir manuellement l'ensemble de votre code pour pouvoir utiliser le nouveau modèle objet. Pour convertir votre modèle de formulaire afin d'utiliser le nouveau modèle d'objet, dans la catégorie Programmation de la boîte de dialogue Options de formulaire, cliquez sur Mettre à niveau le modèle objet.

Chargement de l'intégralité du modèle objet de document XML (DOM) depuis System.Xml

L'exemple de code qui suit illustre le chargement de l'intégralité d'un DOM XML depuis System.Xml à l'aide de la méthode InfoPath CreateDOM et des membres de MSXML 5.0 pour Microsoft Office inclus dans l'espace de noms Microsoft.Office.Interop.InfoPath.SemiTrust.

Les exemples suivants requièrent une directive using ou Imports pour System.Xml dans la section des déclarations du module de code du formulaire. En outre, étant donné que la méthode Load de la classe XmlDocument requiert System.Security.Permissions.FileIOPermission, vous devez configurer le niveau de sécurité du modèle de formulaire sur Autorisation totale au moyen de la catégorie Sécurité et approbation de la boîte de dialogue Options de formulaire.

// 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)

Chargement d'un seul nœud depuis System.Xml

L'exemple de code qui suit présente une fonction qui démontre comment cloner un seul nœud depuis System.Xml.XmlElement à l'aide de la méthode MSXML 5.0 createNode.

Les exemples suivants requièrent une directive using ou Imports pour System.Xml dans la section des déclarations du module de code du formulaire.

// 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