0

我目前从 win32com 包开始。我有 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'

有人可以建议做错了什么吗?提前致谢。

4

1 回答 1

0

我在代码中有两个错误,首先,obj不是选择节点而是DOM选择(感谢Martin 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()
于 2017-03-17T11:33:51.223 回答