Utilizzo di MSXML5 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) 5.0 per Microsoft Office 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 (VSTA) o in Visual Studio.
Note
Per visualizzare informazioni di riferimento su MSXML 5.0, aprire InfoPath, scegliere Guida di Microsoft Office InfoPath, Cerca e quindi Guida per sviluppatori di InfoPath 2007.
I membri del modello di oggetti di MSXML 5.0 contenuti nello spazio dei nomi Microsoft.Office.Interop.InfoPath.SemiTrust non possono venire 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
Il codice di esempio seguente mostra 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 (MSXML) 5.0 per Microsoft Office forniti dallo 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 protezione del modello di modulo su Attendibilità completa utilizzando la categoria Protezione 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 createNode di MSXML 5.0 con wrapper+++.
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