function XmlManager(_xml){
  this.getNodeById=function(id,path){
    if(id==null||path==null)return null;
    var n=this.getFirstNode(path);
    if(n==null)return null;
    var ns=n.childNodes;
    for(var i=0;i<ns.length;i++){
      if(ns[i].nodeType!=1)continue;
      if(ns[i].getAttribute('id')==id)return ns[i];
    }
    return null;
  }
  this.getFirstNode=function(path,node){
    var ary=this.getNodes(path,node)
    if(ary.length==0)return null;
    return ary[0];
  }
  this.getNodes=function(path,node){
    if(path==null)return;
    path=path.replace(/^\/+|\/+$/g,'');
    var ary=new Array(node||_xml);
    var s=path.split('/');
    for(var i=0;i<s.length;i++){
      var list=new Array();
      for(var j=0;j<ary.length;j++){
        var ns=ary[j].childNodes;
        for(var k=0;k<ns.length;k++){
          if(ns.item(k).tagName==s[i])list.push(ns.item(k));
        }
      }
      ary=list;
    }
    return ary;
  }
  this.getFirstValue=function(path,node){
    var n=this.getFirstNode(path,node);
    return this.getNodeValue(n);
  }
  this.getValues=function(path,node){
    var nodes=this.getNodes(path,node);
    var values=new Array();
    if(nodes==null||nodes.length==0)return values;
    for(var i=0;i< nodes.length;i++){
      var value=this.getNodeValue(nodes[i]);
      if(value!=null)values.push(value);
    }
    return values;
  }
  this.getNodeValue=function(n){
    if(n==null||n.firstChild==null)return null;
    return n.firstChild.nodeValue;
  }
}
