Home » Source Code » » jkl-parsexml.js

jkl-parsexml.js ( File view )

From:
  • By 2010-08-11
  • View(s):5
  • Download(s):0
  • Point(s): 1
			// ================================================================
//  jkl-parsexml.js ---- JavaScript Kantan Library for Parse XML
//  Copyright 2005 Kawasaki Yusuke <u-suke@kawa.net>
// ================================================================
//  v0.01  2005/05/18  first release
//  v0.02  2005/05/20  Opera 8.0beta may be abailable but somtimes crashed
//  v0.03  2005/05/20  overrideMimeType( "text/xml" );
//  v0.04  2005/05/21  class variables: REQUEST_TYPE, RESPONSE_TYPE
//  v0.05  2005/05/22  use Msxml2.DOMDocument.5.0 for GET method on IE6
//  v0.06  2005/05/22  CDATA_SECTION_NODE
//  v0.07  2005/05/23  use Microsoft.XMLDOM for GET method on IE6
// ================================================================

if ( typeof(JKL) == 'undefined' ) JKL = function() {

};

//  JKL.ParseXML constructor

JKL.ParseXML = function ( url, query ) {

    // debug.print( "new JKL.ParseXML( '"+url+"', '"+query+"' );" );
    this.url    = url;
    this.method = ( typeof(query) == "string" ) ? "POST" : "GET";
    this.query  = ( typeof(query) == "string" ) ? query : null;
    this.async_done = false;
    return this;

};

//  class variables

JKL.ParseXML.MAP_NODETYPE = [
    "",
    "ELEMENT_NODE",                 // 1
    "ATTRIBUTE_NODE",               // 2
    "TEXT_NODE",                    // 3
    "CDATA_SECTION_NODE",           // 4
    "ENTITY_REFERENCE_NODE",        // 5
    "ENTITY_NODE",                  // 6
    "PROCESSING_INSTRUCTION_NODE",  // 7
    "COMMENT_NODE",                 // 8
    "DOCUMENT_NODE",                // 9
    "DOCUMENT_TYPE_NODE",           // 10
    "DOCUMENT_FRAGMENT_NODE",       // 11
    "NOTATION_NODE"                 // 12
];

JKL.ParseXML.REQUEST_TYPE  = "application/x-www-form-urlencoded";
JKL.ParseXML.RESPONSE_TYPE = "text/xml";
JKL.ParseXML.ACTIVEX_XMLDOM  = "Microsoft.XMLDOM";  // Msxml2.DOMDocument.5.0
JKL.ParseXML.ACTIVEX_XMLHTTP = "Microsoft.XMLHTTP"; // Msxml2.XMLHTTP.3.0

//  define callback function (ajax)

JKL.ParseXML.prototype.async = function ( func, args ) {

    this.callback_func = func;       // callback function
    this.callback_arg  = args;       // first argument

};

JKL.ParseXML.prototype.onerror = function ( func, args ) {

    this.onerror_func = func;       // callback function

};

//  every child/children into array
JKL.ParseXML.prototype.setOutputArrayAll = function () {

    this.setOutputArray( true );

}
//  a child into scalar, children into array
JKL.ParseXML.prototype.setOutputArrayAuto = function () {

    this.setOutputArray( null );

}
//  every child/children into scalar (first sibiling only)
JKL.ParseXML.prototype.setOutputArrayNever = function () {

    this.setOutputArray( false );

}
//  specified child/children into array, other child/children into scalar
JKL.ParseXML.prototype.setOutputArrayElements = function ( list ) {

    this.setOutputArray( list );

}
//  specify how to treate child/children into scalar/array
JKL.ParseXML.prototype.setOutputArray = function ( mode ) {

    if ( typeof(mode) == "string" ) {

        mode = [ mode ];                // string into array
    
}
    if ( mode && typeof(mode) == "object" ) {

        if ( mode.length < 0 ) {

            mode = false;               // false when array == [] 
        
} else {

            var hash = {

};
            for( var i=0; i<mode.length; i++ ) {

                hash[mode[i]] = true;
            
}
            mode = hash;                // array into hashed array
            if ( mode["*"] ) {

                mode = true;            // true when includes "*"
            
}
        
} 
    
} 
    this.usearray = mode;

}

//  Download a remote XML file and parse it.

JKL.ParseXML.prototype.parse = function () {


    var http = new JKL.ParseXML.HTTP( this.method );
    // debug.print( "JKL.ParseXML.HTTP: "+http );
    if ( ! http ) return;

    if ( this.onerror_func ) http.onerror = this.onerror_func;

    if ( this.callback_func ) {
                             // async mode
        var copy = this;
        var proc = function() {

            var dom = http.documentElement();
            var d2j = new JKL.ParseXML.JSON( copy.usearray );
            var json = d2j.parseDocument( dom );
            copy.callback_func( json, copy.callback_arg );  // call back
        
};
        http.load( this.url, this.query, proc );
    
} else {
                                                // sync mode
        http.load( this.url, this.query, null );
        var dom = http.documentElement();
        var d2j = new JKL.ParseXML.JSON( this.usearray );
        var json = d2j.parseDocument( dom );
        return json;
    
}

};

// ================================================================

JKL.ParseXML.HTTP = function( method ) {

    this.req = null;
    this.method = method;
    this.xmlhttp = false;
    this.xmldom = false;
    this.onerror = null;

    if ( window.ActiveXObject ) {

        if ( method == "GET" ) {
                    // IE GET
            // debug.print( 'new ActiveXObject( "'+JKL.ParseXML.ACTIVEX_XMLDOM+'" )' );
            this.req = new ActiveXObject( JKL.ParseXML.ACTIVEX_XMLDOM );
            if ( this.req ) this.xmldom = true;
        
} else {
                                    // IE POST
            // debug.print( 'new ActiveXObject( "'+JKL.ParseXML.ACTIVEX_XMLHTTP+'" )' );
            this.req = new ActiveXObject( JKL.ParseXML.ACTIVEX_XMLHTTP );
            if ( this.req ) this.xmlhttp = true;
        
}
//  
} else if ( method == "GET" &&
//              document.implementation && 
//              document.implementation.createDocument ) {

//      // debug.print( "document.implementation.createDocument()" );
//      this.req = document.implementation.createDocument("", "", null);
//      if ( this.req ) this.xmldom = true;
    
} else if ( window.XMLHttpRequest ) {
           // Firefox, Opera
        // debug.print( "new XMLHttpRequest()" );
        this.req = new XMLHttpRequest();
        if ( this.req ) this.xmlhttp = true;
    
}
    return this;

};

JKL.ParseXML.HTTP.prototype.load = function( url, query, func ) {


    // async mode when call back function is specified
    var async = func ? true : false;
    // debug.print( "async: "+ async );

    if ( this.xmlhttp ) {

        // open
        // debug.print( "open( '"+this.method+"', '"+url+"', "+async+" );" );
        this.req.open( this.method, url, async );

        // response Content-Type: text/xml (override)
        if ( typeof(this.req.overrideMimeType) != "undefined" ) {

            // debug.print( "Content-Type: "+JKL.ParseXML.RESPONSE_TYPE+" (response)" );
            this.req.overrideMimeType( JKL.ParseXML.RESPONSE_TYPE );
        
}

        // request Content-Type: application/x-www-form-urlencoded
        if ( typeof(this.req.setRequestHeader) != "undefined" ) {

            // debug.print( "Content-Type: "+JKL.ParseXML.REQUEST_TYPE+" (request)" );
            this.req.setRequestHeader("content-type", JKL.ParseXML.REQUEST_TYPE );
        
}
    
}

    // set call back handler when async mode
    if ( async ) {

        var copy = this;
        copy.already_done = false;                  // not parsed yet
        var callback = function () {

            if ( copy.req.readyState != 4 ) return;
            // debug.print( "readyState: "+copy.req.readyState );
            if ( copy.xmlhttp ) {

                // debug.print( "status: "+copy.req.status+" (async mode)" );
                if ( copy.req.status != 200 && copy.req.status != 304 ) {

                    if ( copy.onerror ) copy.onerror( copy.req.status );
                    return;
                
}
            
}
            if ( copy.xmldom ) {

                // parseError on Microsoft.XMLDOM
                if ( copy.req.parseError && copy.req.parseError.errorCode != 0 ) {

                    // debug.print( "parseError: "+copy.req.parseError.reason );
                    if ( copy.onerror ) copy.onerror( copy.req.parseError.reason );
                    return;
                
}
            
}
            if ( copy.already_done ) return;        // parse only once
            copy.already_done = true;               // already parsed
            func();                                 // call back
        
};
        this.req.onreadystatechange = callback;
        // this.req.onload = func;  // document.implementation.createDocument
    
}

    if ( this.xmldom ) {

        this.req.async = async;

        //  send the request and query string
        // debug.print( "load( '"+url+"' );" );
        this.req.load( url );
    
}

    if ( this.xmlhttp ) {

        // send the request and query string
        // debug.print( "send( '"+query+"' );" );
        this.req.send( query );
    
}

    // just return when async mode
    if ( async ) return;

    if ( this.xmldom ) {

        // parseError on Microsoft.XMLDOM
        if ( this.req.parseError && this.req.parseError.errorCode != 0 ) {

            // debug.print( "parseError: "+this.req.parseError.reason );
            if ( this.onerror ) this.onerror( this.req.parseError.reason );
            return;
        
}
    
}

    if ( this.xmlhttp ) {

        // debug.print( "status: "+this.req.status+" (sync mode)" );
        if ( this.req.status != 200 && this.req.status != 304 ) {

            if ( this.onerror ) this.onerror( this.req.parseError.reason );
            return;
        
}
    
}

}

JKL.ParseXML.HTTP.prototype.documentElement = function() {

    if ( ! this.req ) return;
    if ( this.xmlhttp && this.req.responseXML ) {

        return this.req.responseXML.documentElement;
    
}
    if ( this.xmldom ) {

        return this.req.documentElement;
    
}

}

// ================================================================

JKL.ParseXML.JSON = function( usearray ) {

    this.usearray = usearray;
    return this;

}

//  convert from DOM to JSON 

JKL.ParseXML.JSON.prototype.parseDocument = function ( root ) {

    // debug.print( "parseDocument: "+root );
    if ( ! root )
...
...
(Not finished, please download and read the complete file)
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 1

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
auto_suggest.html1.09 kB03-12-07 00:11
crud.html1.68 kB03-12-07 00:11
03.00 B
2col_leftNav.css6.28 kB03-12-07 00:11
autosuggest.css335.00 B03-12-07 00:11
debug.png399.00 B03-12-07 00:11
error.png289.00 B03-12-07 00:11
fatal.png309.00 B03-12-07 00:11
info.png271.00 B03-12-07 00:11
logger.css1.88 kB03-12-07 00:11
magnet.png430.00 B03-12-07 00:11
site.css1.43 kB03-12-07 00:11
warn.png257.00 B03-12-07 00:11
03.00 B
auto_suggest.html.txt1.09 kB03-12-07 00:11
auto_suggest.js.txt669.00 B03-12-07 00:11
CountryList.java.txt3.00 kB03-12-07 00:11
crud.html.txt1.68 kB03-12-07 00:11
crud.js.txt1.40 kB03-12-07 00:11
crud.jst.txt755.00 B03-12-07 00:11
index.html.txt3.24 kB03-12-07 00:11
jst_demo.html.txt1.68 kB03-12-07 00:11
LabelValueBean.java.txt4.72 kB03-12-07 00:11
mvcPic.html.txt1.05 kB03-12-07 00:11
rdf.jst.txt284.00 B03-12-07 00:11
rss.jst.txt272.00 B03-12-07 00:11
rss_reader.html.txt1.20 kB03-12-07 00:11
rss_reader.js.txt642.00 B03-12-07 00:11
services.properties.txt168.00 B03-12-07 00:11
services.xml.txt435.00 B03-12-07 00:11
Test.java.txt17.36 kB03-12-07 00:11
TestBean.java.txt1.41 kB03-12-07 00:11
unit_test.html.txt1.03 kB03-12-07 00:11
unit_test.js.txt15.89 kB03-12-07 00:11
unit_test.jst.txt493.00 B03-12-07 00:11
unit_test_js.jst.txt765.00 B03-12-07 00:11
User.java.txt2.49 kB03-12-07 00:11
UserManager.java.txt2.04 kB03-12-07 00:11
web.xml.txt1.58 kB03-12-07 00:11
web.xml_no_spring.txt1.58 kB03-12-07 00:11
03.00 B
check.gif604.00 B03-12-07 00:11
debug.png399.00 B03-12-07 00:11
error.gif633.00 B03-12-07 00:11
error.png289.00 B03-12-07 00:11
fatal.png309.00 B03-12-07 00:11
info.png271.00 B03-12-07 00:11
magnet.png430.00 B03-12-07 00:11
swato_01.png5.22 kB03-12-07 00:11
swato_02.png13.94 kB03-12-07 00:11
swato_04.png7.94 kB03-12-07 00:11
swato_05.png14.42 kB03-12-07 00:11
swato_Layer-5-over.png27.12 kB03-12-07 00:11
swato_Layer_5.png28.45 kB03-12-07 00:11
wait.gif1.52 kB03-12-07 00:11
warn.png257.00 B03-12-07 00:11
index.html3.70 kB03-12-07 00:11
03.00 B
effects.js33.07 kB03-12-07 00:11
jkl-floating.js7.22 kB03-12-07 00:11
jkl-parsexml.js14.11 kB03-12-07 00:11
jkl-resizable.js5.05 kB03-12-07 00:11
json.js10.34 kB03-12-07 00:11
logger.js6.77 kB03-12-07 00:11
pop-it-menu.js4.44 kB03-12-07 00:11
prototype.js55.81 kB03-12-07 00:11
swato-engine.js5.06 kB03-12-07 00:11
swato-form.js3.00 kB03-12-07 00:11
swato-jst.js3.91 kB03-12-07 00:11
swato-select.js1.18 kB03-12-07 00:11
swato-suggest.js11.62 kB03-12-07 00:11
swato.js939.00 B03-12-07 00:11
window.js40.77 kB03-12-07 00:11
03.00 B
crud.jst744.00 B03-12-07 00:11
rdf.jst284.00 B03-12-07 00:11
rss.jst272.00 B03-12-07 00:11
unit_test.jst493.00 B03-12-07 00:11
unit_test_js.jst765.00 B03-12-07 00:11
jst_demo.html1.68 kB03-12-07 00:11
03.00 B
MANIFEST.MF106.00 B03-12-07 00:11
mvcPic.html1.05 kB03-12-07 00:11
rss_reader.html1.20 kB03-12-07 00:11
03.00 B
auto_suggest.js665.00 B03-12-07 00:11
crud.js1.41 kB03-12-07 00:11
portal.js4.66 kB03-12-07 00:11
rss_reader.js642.00 B03-12-07 00:11
unit_test.js15.89 kB03-12-07 00:11
swato.jar56.50 kB08-04-08 10:57
test.html18.36 kB03-12-07 00:11
unit_test.html1.03 kB03-12-07 00:11
03.00 B
03.00 B
03.00 B
03.00 B
JSONArray.class8.16 kB03-12-07 00:11
JSONObject$1.class199.00 B03-12-07 00:11
JSONObject$Null.class860.00 B03-12-07 00:11
JSONObject.class10.41 kB03-12-07 00:11
JSONTokener.class5.17 kB03-12-07 00:11
03.00 B
03.00 B
03.00 B
CountryList.class2.52 kB03-12-07 00:11
LabelValueBean$1.class825.00 B03-12-07 00:11
LabelValueBean.class2.15 kB03-12-07 00:11
LabelValueBeanTest.class1.88 kB03-12-07 00:11
ObjA.class571.00 B03-12-07 00:11
ObjB.class571.00 B03-12-07 00:11
Test$1.class565.00 B03-12-07 00:11
Test$2.class714.00 B03-12-07 00:11
Test$Foo.class231.00 B03-12-07 00:11
Test$InnerFoo.class643.00 B03-12-07 00:11
Test$InnerSubTestBean.class520.00 B03-12-07 00:11
Test$StaticInnerSubTestBean.class437.00 B03-12-07 00:11
Test$TestBeanInvocationHandler.class1.56 kB03-12-07 00:11
Test.class13.72 kB03-12-07 00:11
TestBean.class1.27 kB03-12-07 00:11
User.class1.65 kB03-12-07 00:11
UserManager.class2.27 kB03-12-07 00:11
JSONConverter.class8.00 kB03-12-07 00:11
JSONConverterTest$1.class240.00 B03-12-07 00:11
JSONConverterTest$TestBean.class1.73 kB03-12-07 00:11
JSONConverterTest.class6.13 kB03-12-07 00:11
03.00 B
JSONRequest.class2.96 kB03-12-07 00:11
JSONResponse.class2.41 kB03-12-07 00:11
JSONServlet.class4.00 kB03-12-07 00:11
PropsFileContext.class3.48 kB03-12-07 00:11
RequestAware.class198.00 B03-12-07 00:11
RequestParameterHolder.class2.36 kB03-12-07 00:11
RequestParameterRecorder.class2.17 kB03-12-07 00:11
RequestRedirector.class2.78 kB03-12-07 00:11
ServiceContext.class243.00 B03-12-07 00:11
SessionAware.class191.00 B03-12-07 00:11
SpringContext.class1.39 kB03-12-07 00:11
SwatoActionProxy.class4.86 kB03-12-07 00:11
SwatoVisible.class396.00 B03-12-07 00:11
03.00 B
Pipe.class2.02 kB03-12-07 00:11
Utils.class632.00 B03-12-07 00:11
services.properties168.00 B03-12-07 00:11
services.xml881.00 B03-12-07 00:11
03.00 B
commons-httpclient-2.0.2.jar220.09 kB03-12-07 00:11
commons-logging.jar37.12 kB03-12-07 00:11
spring-beans.jar213.99 kB03-12-07 00:11
spring-context.jar100.22 kB03-12-07 00:11
spring-core.jar71.98 kB03-12-07 00:11
web.xml1.58 kB03-12-07 00:11
...
Sponsored links

jkl-parsexml.js (884.61 kB)

Need 1 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D