470,591 Members | 1,498 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,591 developers. It's quick & easy.

Slicing an IXMLDOMNodeList

Hi,

I'm using MSXML to select elements from a XML document and want
to slice off the last part of an IXMLDOMNodeList.
import win32com.client
xmldoc = win32com.client.Dispatch('msxml.DOMDocument')
xmldoc.load('file.xml') True rgelem = xmldoc.selectNodes('/root/elem')
if rgelem.length > 10: .... rgelem = rgelem[-10:]
....
Traceback (most recent call last):
File "<interactive input>", line 2, in ?
File "C:\Python24\Lib\site-packages\win32com\client\__init__.py",
line 454, in __getattr__
raise AttributeError, "'%s' object has no attribute '%s'" %
(repr(self), attr)
AttributeError: '<win32com.gen_py.Microsoft XML, v4.0.IXMLDOMNodeList
instance at 0x19500888>' object has no attribute '__len__'


The IXMLDOMNodeList obviously doesn't have a '__len__' member
function (why not?).
Is there a way to make the IXMLDOMNodeList support slicing?
I've tried to give the rgelem object a __len__ member, but got
an exception from __setattr__:

File "C:\Python24\Lib\site-packages\win32com\client\__init__.py",
line 462, in __setattr__
raise AttributeError, "'%s' object has no attribute '%s'" %
(repr(self), attr)
AttributeError: '<win32com.gen_py.Microsoft XML, v4.0.IXMLDOMNodeList
instance at 0x26395112>' object has no attribute '__len__'

Anybody know how to make this work?

TIA,
-- Marcel

Jul 19 '05 #1
1 1610
For future reference:

The solution to this problem is a simple one.
rgelem = list(xmldoc.selectNodes('/root/elem'))
returns a real list of IXMLDOMElements that can be sliced.

-- Marcel

Jul 19 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

By using this site, you agree to our Privacy Policy and Terms of Use.