Freigeben über


Arbeiten mit MSXML5 und System.Xml mit dem InfoPath 2003-Objektmodell

Formularvorlagenprojekte, die mit dem InfoPath 2003-Objektmodell arbeiten, verwenden Microsoft XML Core Services (MSXML) 5.0, damit Microsoft Office intern mit XML arbeitet. Bei verwaltetem Code ist es häufig einfacher, die vom System.Xml-Namespace bereitgestellte XML-Unterstützung in der .NET Framework-Bibliothek zu verwenden. Es ist für MSXML und System.Xml kein systemeigener Objektaustausch möglich, sodass die XML-Daten jedes Mal konvertiert werden müssen, wenn XML-Daten an InfoPath und anderen verwalteten Code übergeben werden sollen. Sie können XML-Daten von System.Xml-Objekten mit InfoPath-Formularcode austauschen, indem Sie die in diesem Thema beschriebenen Techniken verwenden.

Damit Sie Member des System.Xml-Namespace in einem Projekt mit verwaltetem Code verwenden können, das das InfoPath 2003-Objektmodell verwendet, müssen Sie in Microsoft Visual Studio Tools für Anwendungen (VSTA) oder Visual Studio im Dialogfeld Verweis hinzufügen auf der Registerkarte .NET einen Verweis auf System.Xml hinzufügen.

Hinweise

  • Öffnen Sie zum Anzeigen von Referenzinformationen zu MSXML 5.0 InfoPath, klicken Sie auf Microsoft Office InfoPath-Hilfe, auf Suchen, und klicken Sie dann auf InfoPath 2007 Developer-Hilfe.

  • Member des MSXML 5.0-Objektmodells, die vom Microsoft.Office.Interop.InfoPath.SemiTrust-Namespace eingebunden sind, können Delegaten im Formularcode von Formularvorlagen mit verwaltetem Code nicht zugewiesen werden.

  • Wenn Sie den Code der Formularvorlage so aktualisieren, dass das von Membern des Microsoft.Office.InfoPath-Namespace bereitgestellte Objektmodell verwendet wird, wird System.Xml systemeigen verwendet. Sie müssen in diesem Fall jedoch den kompletten Code konvertieren, um das neue Objektmodell verwenden zu können. Klicken Sie zum Konvertieren der Formularvorlage zum Verwenden des neuen Objektmodells im Dialogfeld Formularoptionen in der Kategorie Programmierung auf OM aktualisieren.

Laden eines vollständigen XML-DOMs (Document Object Model) aus System.Xml

Das folgende Codebeispiel veranschaulicht, wie ein vollständiges XML-DOM aus System.Xml-Code mit der CreateDOM-Methode von InfoPath und den Membern von Microsoft XML Core Services (MSXML) 5.0 für Microsoft Office geladen wird, die vom Microsoft.Office.Interop.InfoPath.SemiTrust-Namespace eingebunden sind.

Bei den folgenden Beispielen ist eine using- oder Imports-Direktive für System.Xml im Deklarationsabschnitt des Formularcodemoduls erforderlich. Da die Load-Methode der XmlDocument-Klasse System.Security.Permissions.FileIOPermission erfordert, müssen Sie darüber hinaus die Sicherheitsebene der Formularvorlage als Voll vertrauenswürdig konfigurieren. Verwenden Sie hierzu im Dialogfeld Formularoptionen die Kategorie Sicherheit und Vertrauensstellung.

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

Laden eines einzelnen Knotens aus System.Xml

Das folgende Beispiel zeigt eine Funktion, mit der dargestellt wird, wie ein einzelner Knoten aus einem System.Xml.XmlElement mithilfe der eingebundenen createNode-Methode von MSXML 5.0 geklont wird.

Bei den folgenden Beispielen ist eine using- oder Imports-Direktive für System.Xml im Deklarationsabschnitt des Formularcodemoduls erforderlich.

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