次の方法で共有


InfoPath 2003 オブジェクト モデルを使用して MSXML5 および System.Xml を操作する

InfoPath 2003 オブジェクト モデルを使用するフォーム テンプレート プロジェクトは、内部で Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office を使用して XML を操作します。マネージ コードでは、多くの場合、.NET Framework クラス ライブラリの System.Xml 名前空間によって提供される XML サポートを使用した方が簡単です。MSXML と System.Xml では、オブジェクトをネイティブで交換することはできません。したがって、InfoPath と他のマネージ コードとの間で XML データの受け渡しを行う際には、常に XML データの変換が必要になります。ここで説明する方法を使用すると、System.Xml オブジェクトの XML データを InfoPath フォーム コードと交換できます。

InfoPath 2003 オブジェクト モデルを使用するマネージ コード プロジェクトで System.Xml 名前空間のメンバを使用するには、Microsoft Visual Studio Tools for Applications (VSTA) または Visual Studio の [参照の追加] ダイアログ ボックスの [.NET] タブで、System.Xml への参照を追加する必要があります。

メモ

  • MSXML 5.0 のリファレンス情報を表示するには、InfoPath を開き、[Microsoft Office InfoPath ヘルプ] をクリックして、[検索] をクリックします。次に、[InfoPath 2007 開発者用ヘルプ] をクリックします。

  • Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間によってラップされた MSXML 5.0 オブジェクト モデルのメンバをマネージ コード フォーム テンプレートのフォーム コードのデリゲートに割り当てることはできません。

  • Microsoft.Office.InfoPath 名前空間のメンバによって提供されるオブジェクト モデルを使用するようにフォーム テンプレートのコードを更新すると、System.Xml がネイティブで使用されます。ただし、その場合は、すべてのコードを新しいオブジェクト モデルを使用するように手動で変換する必要があります。フォーム テンプレートを新しいオブジェクト モデルを使用するように変換するには、[フォームのオプション] ダイアログ ボックスの [プログラミング] カテゴリで [オブジェクト モデルのアップグレード] をクリックします。

System.Xml から XML Document Object Model (DOM) 全体を読み込む

次のコード例は、InfoPath の CreateDOM メソッドと、Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間によってラップされた Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office のメンバを使用して、System.Xml のコードから XML DOM 全体を読み込む方法を示しています。

この例では、フォーム コード モジュールの宣言セクションに System.Xmlusing ディレクティブまたは Imports ディレクティブが必要です。また、XmlDocument クラスの Load メソッドには System.Security.Permissions.FileIOPermission が必要なため、[フォームのオプション] ダイアログ ボックスの [セキュリティと信頼] カテゴリを使用して、フォーム テンプレートのセキュリティ レベルを [完全信頼] として構成する必要があります。

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

System.Xml から 1 つのノードを読み込む

次のコード例の関数は、ラップされた MSXML 5.0 createNode メソッドを使用して System.Xml.XmlElement の 1 つのノードを複製する方法を示しています。

この例では、フォーム コード モジュールの宣言セクションに System.Xmlusing ディレクティブまたは Imports ディレクティブが必要です。

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