2017-03-16 40 views
0

我目前從win32com軟件包開始。我有哪裏我使用的Python編程COM對象XSL文件:python COM服務器查詢界面

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

XSL轉換使用MSXML2 XSL處理器和Python COM對象所做的是使用ADDOBJECT方法注入。 的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端,您不會將單個節點傳遞給方法,而是選擇https://msdn.microsoft.com/zh-cn/library/ms759171(v=vs.85 ).aspx,所以你可能想試試你的Python代碼是否可以轉換爲選擇而不是節點。 –

+0

謝謝。你是對的,_obj_是DOM選擇 –

回答

0

我曾在兩個代碼錯誤,首先,沒有選擇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()