By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,923 Members | 1,279 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,923 IT Pros & Developers. It's quick & easy.

Slicing an IXMLDOMNodeList

P: n/a
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
Share this Question
Share on Google+
1 Reply


P: n/a
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.