Condividi tramite


Utilizzo di MSXML e System.Xml tramite il modello a oggetti di InfoPath 2003

I progetti modello di modulo supportati dal modello a oggetti di InfoPath 2003 utilizzano internamente Microsoft XML Core Services (MSXML) al fine di interagire con XML. Con il codice gestito è più semplice utilizzare il supporto XML offerto dallo spazio dei nomi System.Xml nella libreria di classi di .NET Framework. Poiché MSXML e System.Xml non sono in grado di scambiare oggetti in modo nativo, per ogni passaggio di dati XML tra InfoPath e altro codice gestito è necessario convertire i dati XML. È possibile scambiare dati XML da oggetti System.Xml con codice del modulo di InfoPath utilizzando le tecniche descritte in questo argomento.

Per implementare i membri dello spazio dei nomi System.Xml in un progetto con codice gestito che utilizza il modello a oggetti di InfoPath 2003, è necessario aggiungere un riferimento a System.Xml nella scheda .NET della finestra di dialogo Aggiungi riferimento in Microsoft Visual Studio Tools for Applications.

Note

  • Per visualizzare informazioni di riferimento su MSXML, vedere la documentazione di MSXML SDK.

  • I membri del modello a oggetti di MSXML contenuti nello spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust non possono essere assegnati a delegati nel codice del modulo dei modelli di modulo con codice gestito.

  • Se si aggiorna il codice del proprio modello di modulo per utilizzare il modello di modulo fornito dai membri dello spazio dei nomi Microsoft.Office.InfoPath, System.Xml viene utilizzato in modo nativo. In tal caso, è tuttavia necessario convertire manualmente tutto il codice per utilizzare il nuovo modello a oggetti. A tale scopo, nella categoria Programmazione della finestra di dialogo Opzioni modulo fare clic su Aggiorna modello a oggetti.

Caricamento di un intero modello DOM (Document Object Model) XML da System.Xml

Nell'esempio di codice seguente viene illustrato come caricare un intero modello DOM XML da codice System.Xml utilizzando il metodo di InfoPath CreateDOM e i membri di Microsoft XML Core Services contenuti nei membri dello spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust.

L'esempio seguente richiede una direttiva using o Imports per System.Xml nella sezione delle dichiarazioni del modulo di codice del modulo. Poiché il metodo Load della classe XmlDocumentrichiede System.Security.Permissions.FileIOPermission, è inoltre necessario configurare il livello di sicurezza del modello di modulo su Attendibilità completa utilizzando la categoria Sicurezza e attendibilità della finestra di dialogo Opzioni modulo.

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

Caricamento di un singolo nodo da System.Xml

Nell'esempio seguente viene illustrata una funzione che mostra come clonare un singolo nodo da uno spazio dei nomi System.Xml.XmlElement utilizzando il metodo con wrapper createNode di MSXML.

L'esempio seguente richiede una direttiva using o Imports per System.Xml nella sezione delle dichiarazioni del modulo di codice del modulo.

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