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

Les projets de modèle de formulaire qui fonctionnent avec le modèle objet InfoPath 2003 utilisent Microsoft XML Core Services® (MSXML) en interne pour travailler avec XML. Dans le code managé, il est souvent plus facile d’utiliser la prise en charge XML fournie par l’espace de nomsSystem.Xml dans la bibliothèque de classes .NET Framework. MSXML et System.Xml ne peuvent pas échanger d’objets en mode natif. Par conséquent, chaque fois que vous devez passer des données XML entre InfoPath et un autre code managé, les données XML doivent être converties. Vous pouvez échanger des données XML à partir d’objetsSystem.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 dans Visual Studio 2012.

Notes

  • Pour afficher des informations de référence sur MSXML, voir le MSXML SDK.

  • Les membres du modèle objet MSXML 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 des 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 comment charger l'intégralité d'un DOM XML depuis System.Xml à l'aide de la méthode InfoPath CreateDOM et des membres de MSXML (Microsoft XML Core Services) incorporés 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 incorporée 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