The following code works well for me:
[code]myGrid._process_custom_xml=function(xml){
this._parsing=true;
var top=dhx4.ajax.xmltop(“modules”, xml);
var rows = dhx4.ajax.xpath("./clientse164",top); //gets all row elements from XML
for (var i = 0; i < rows.length; i++){
var id = this.getUID(); //XML has no native ids,so custom ids are generated
this.rowsBuffer[i]={ //stores references to each row element
idd: id,
data: rows[i],
_parser: this._process_custom_xml_row, //cell parser method
_locator: this._get_custom_xml_data //data locator method
};
this.rowsAr[id]=rows[i]; //stores id reference
}
this.render_dataset(); //forces update of grid's view after data loading
this._parsing=false;
};
myGrid._process_custom_xml_row=function(r, xml){
var client = dhx4.ajax.xpath("./id_client", xml)[0];
var login = dhx4.ajax.xpath("./login", xml)[0];
var password = dhx4.ajax.xpath("./password", xml)[0];
var type = dhx4.ajax.xpath("./type", xml)[0];
var tariff = dhx4.ajax.xpath("./id_tariff", xml)[0];
var state = dhx4.ajax.xpath("./account_state", xml)[0];
var reseller = dhx4.ajax.xpath("./id_reseller", xml)[0];
var type2 = dhx4.ajax.xpath("./type2", xml)[0];
var currency = dhx4.ajax.xpath("./id_currency", xml)[0];
var proxy = dhx4.ajax.xpath("./media_proxy", xml)[0];
var name = dhx4.ajax.xpath("./full_name", xml)[0];
var email = dhx4.ajax.xpath("./email", xml)[0];
var status = dhx4.ajax.xpath("./status", xml)[0];
var first = dhx4.ajax.xpath("./first_use", xml)[0];
var last = dhx4.ajax.xpath("./last_use", xml)[0];
var strAr = [
(client?client.firstChild.data:""),
(login?login.firstChild.data:""),
(password?password.firstChild.data:""),
(type?type.firstChild.data:""),
(tariff?tariff.firstChild.data:""),
(state?state.firstChild.data:""),
(reseller?reseller.firstChild.data:""),
(type2?type2.firstChild.data:""),
(currency?currency.firstChild.data:""),
(proxy?proxy.firstChild.data:""),
(name?name.firstChild.data:""),
(email?email.firstChild.data:""),
(status?status.firstChild.data:""),
(first?first.firstChild.data:""),
(last?last.firstChild.data:"")
];
//sets just a plain array as no custom attributes are needed
r._attrs={};
for (j=0; j < r.childNodes.length; j++) r.childNodes[j]._attrs={};
//finishes data loading
this._fillRow(r, strAr);
return r;
}[/code]