2017-03-16 2 views
0

現在、私はwin32comパッケージから開始しています。Python COMサーバーのクエリインターフェイス

<xsl:value-of select="plugin:GetTest(.)"/> 

XSL変換はのaddObject方法を用いて注入されたMSXML2 XSLプロセッサとPythonのCOMオブジェクトを使用して行われます:私は、私はPythonでプログラムされたCOMオブジェクトを使用していXSLファイルを持っています。次のようにGetTest方法の 実装は次のとおりです。

def GetTest(self, obj): 
     IID_IXMLDOMNode = IID("{2933BF80-7B36-11d2-B20E-00C04F983E60}") 
     try: 
      node = win32com.client.Dispatch(obj, None, IID_IXMLDOMNode) 
      #node = obj.QueryInterface(IID_IXMLDOMNode) 
      return node.get_text() 
     except Exception as e: 
      return format_exc() 

OBJ引数はPyIDispatchを入力しています。私のIXMLDOMNodeノードインターフェイスで動作させるために、何とかそれを取得する必要があります。しかし、コメントのないアプローチは

AttributeError: <unknown>.get_text 

に失敗し、コメントのアプローチは

obj.QueryInterface(IID_IXMLDOMNode)<\u000d>pywintypes.com_error: (-2147467262, 'No such interface supported' 

で失敗誰が間違ってやっている何の提案を持っていることはできますか?前もって感謝します。

+2

をしていない私は、MSXMLを使用したことがありませんPythonではPythonのコード部分を評価することはできませんが、JScriptやVBScriptから覚えている限り、たとえば'foo:method(。)' XSLT側では、メソッドに1つのノードを渡すのではなく、選択肢を渡します。https://msdn.microsoft.com/en-us/library/ms759171(v=vs.85) ).aspxだから、あなたのPythonコードをノードではなくセレクションにキャストすることができるかどうかを試したいかもしれません。 –

+0

ありがとうございます。あなたは正しい、_obj_はDOMの選択です –

答えて

0

私はコード内の2つのミスがあったが、まず、OBJは、ノードが、DOMの選択(おかげでマーティンHonnen)が選択されていない、第二に、IXMLDOMNodeは_get_text_方法

def GetTest(self, obj): 
    try: 
     selector = win32com.client.Dispatch(obj, None, IID_IXMLDOMSelection) 

     out = [] 

     for node in selector: 
      out.append(node.nodeName) 

     return ", ".join(out) 
    except Exception as e: 
     return format_exc() 
関連する問題