Можно использовать свойство для создания интерфейсов класса более строгими.
class C(object):
def __init__(self, foo, bar):
self.foo = foo # read-write property
self.bar = bar # simple attribute
def _set_foo(self, value):
self._foo = value
def _get_foo(self):
return self._foo
def _del_foo(self):
del self._foo
# any of fget, fset, fdel and doc are optional,
# so you can make a write-only and/or delete-only property.
foo = property(fget = _get_foo, fset = _set_foo,
fdel = _del_foo, doc = 'Hello, I am foo!')
class D(C):
def _get_foo(self):
return self._foo * 2
def _set_foo(self, value):
self._foo = value / 2
foo = property(fget = _get_foo, fset = _set_foo,
fdel = C.foo.fdel, doc = C.foo.__doc__)
В Python 2.6 и 3.0 :
class C(object):
def __init__(self, foo, bar):
self.foo = foo # read-write property
self.bar = bar # simple attribute
@property
def foo(self):
'''Hello, I am foo!'''
return self._foo
@foo.setter
def foo(self, value):
self._foo = value
@foo.deleter
def foo(self):
del self._foo
class D(C):
@C.foo.getter
def foo(self):
return self._foo * 2
@foo.setter
def foo(self, value):
self._foo = value / 2
, Чтобы узнать больше, как работы свойства относятся к дескрипторы .
Используйте объект XML E4X для создания списка XMLList ваших «домашних» узлов. Затем вы можете вызвать метод длины в XMLList.
//<pets>
// <pet type="dog">Barney</pet>
// <pet type="cat">Socks</pet>
//</pets>
// initialized to some XML resembling your example
var petsXML = new XML("");
// build XMLList
var petList = petsXML['pet'];
// alternative syntax
// var petList = petsXML.pet;
// how many pet nodes are under a given pets node?
var length = petList.length();
Using the DOM you can call getElementsByTagName()
.
alert( document.getElementsByTagName( "pet" ).length );
More information:
https://developer.mozilla.org/en/DOM:element.getElementsByTagName
You're going to need to obtain the XML document somehow. XHR, for example, returns documents as parsed XML.
var xhr = new XMLHttpRequest();
xhr.open( 'GET', 'http://domain.com/pets.xml', true );
xhr.onreadystatechange = function ( e ) {
if ( xhr.readyState == 4 && xhr.status == 200 )
alert( xhr.responseXML.getElementsByTagName( "pet" ).length );
};
xhr.send( null );
I'd say... use jQuery!
var count = 0;
$(xmlDoc).find("pet").each(function() {
count++;
// do stuff with attributes here if necessary.
// var pet = $(this);
// var myPetType = pet.attr("type");
};
});
EDIT: Can't use jquery... ok, let's do it in regular javascript :(
var pets= xmlDoc.getElementsByTagName("pet");
for ( var i = 0; i < pets.length ; i++ )
{
count++;
// var petObj = {
// pets[i].getAttribute("type")
// };
}