English Japanese Kawa.netxp [JSAN] XML.ObjTree - XML�`JavaScript�I�u�W�F�N�g�ϊ��N���X

XML.ObjTree �N���X�́APerl �p�� XML::TreePP ���W���[���� JavaScript �łł��B
XML �t�@�C���� JavaScript �I�u�W�F�N�g�i�A�z�z��j�Ԃ̑��ݕϊ����s���܂��B
prototype.js �܂��� JSAN �� HTTP.Request �N���X�ƕ��p���邱�ƂŁA JKL.ParseXML �� ��p �Ƃ��Ă����p�ł��܂��B
ECMA-357 �̕��y��҂����ɁA ECMAScript for XML (E4X) ����XML�̃I�u�W�F�N�g���p���”\�ɂȂ�܂��B

Intel Mac �ł� Safari �ŁA DOMParser �I�u�W�F�N�g�� async �v���p�e�B�� read-only �ƂȂ�_�ɂ��Ή����Ă��܂��B
IE �Łi�T�[�o��łȂ��j���[�J����XML�t�@�C�����J���₷���Ȃ�܂����B�i2006/08/14�j

�_�E�����[�h�Ǝg�p�菇

�_�E�����[�h�́A JSAN �܂��� ���R�`������ǂ����B

�A�[�J�C�u�F XML.ObjTree-0.24.tar.gz TARGZ
.js �\�[�X�t�@�C���P�́F lib/XML/ObjTree.js JavaScript

IE 7�AFirefox 1.5.0�AOpera 8.53�ASafari 2.0.3 �� ����m�F�� �ł��B

<script> �v�f�Ń��[�h����ꍇ

.tar.gz �A�[�J�C�u�ɂ̓e�X�g�t�@�C���Ȃǂ��܂܂�܂����A ����ɕK�v�Ȃ̂� lib/XML/ObjTree.js �t�@�C�������ł��B
���̑��� JSAN �n�N���X�ɂ͈ˑ����Ȃ��̂ŁA�P�̂ŗ��p�ł��܂��B
�ʏ�ʂ�A<script> �v�f�œǂݍ��ޏꍇ�͈ȉ��̂悤�ɂȂ�܂��B DEMO

<html>
<head>
<script src="lib/XML/ObjTree.js"></script>
</head>
<body>
<script><!--
    var xotree = new XML.ObjTree();
    var xml = '<?xml version="1.0"?><root><node>Hello, World!</node></root>';
    var tree = xotree.parseXML( xml );       	// source to tree
    document.write( "message: "+tree.root.node );
// --></script>
</body>
</html>

JSAN.use() �œ��I���[�h����ꍇ

�܂��́AJSAN �� use ���\�b�h�ɂ�铮�I���[�h�@�\���g���Ȃ火�̂悤�ɂ������܂��B DEMO

<html>
<head>
<script src="lib/JSAN.js"></script>
</head>
<body>
<script><!--
    JSAN.addRepository("lib");
    JSAN.errorLevel = "die";
    JSAN.use( 'XML.ObjTree' );

    var xotree = new XML.ObjTree();
    var tree = {
        root: {
            node: "Hello, World!"
        }
    };
    var xml = xotree.writeXML( tree );        // tree to source
	xml = xml.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
    document.write( "xml: "+xml );
// --></script>
</body>
</html>

�l�I�ɂ́AJSAN ���g�킸�ɁA<script> �v�f�Ŗ����I�ɓǂݍ��񂾕���������₷���Ǝv���܂��B

JavaScript �I�u�W�F�N�g�W�J�d�l

�ȉ��̂悤��XML�t�@�C����W�J����ꍇ��z�肵�܂��B

<?xml version="1.0" encoding="UTF-8"?>
<family name="�R�c">
    <father>���Y</father>
    <mother>�Ԏq</mother>
    <children>
        <girl>�a�]</girl>
        <boy>��Y</boy>
        <boy>���Y</boy>
    </children>
</family>

��L�� XML �t�@�C���́A parseXML() ���\�b�h�̂��A �ȉ��̂悤�� JavaScript �I�u�W�F�N�g�i�A�z�z��j�ɓW�J����܂��B

{
    'family': {
        '-name':    '�R�c',
        'father':   '���Y',
        'mother':   '�Ԏq',
        'children': {
            'girl': '�a�]'
            'boy': [
                '��Y',
                '���Y'
            ]
        }
    }
};

�t�ɁAwriteXML() ���\�b�h�Ŕ��Ε��� �iJavaScript�I�u�W�F�N�g��XML�R�[�h�j�ɕϊ��ł��܂��B
JavaScript ��Ŏ�y�� XML �R�[�h�𐶐��ł��邽�߁A XML-RPC ���N�G�X�g�Ȃǂɗ��p�ł��܂��B

�e�v�f���ƂɓW�J���[�������Ă����܂��B
XML �̗v�f�́A���ꂼ�� JavaScript �̃I�u�W�F�N�g�i�v���p�e�B�j�ɓW�J����܂��B
�v�f�̃l�X�g�̓I�u�W�F�N�g�̃l�X�g�ƂȂ邽�߁A �q�v�f�ɂ� .�i�s���I�h�j����؂蕶���Ƃ��ăA�N�Z�X�ł��܂��B

tree.family.father;             # ��������̖��O

XML �̑����l�́A�������̐擪�� - �i�n�C�t���j��t�����v���p�e�B�ɓW�J����܂��B

tree.family["-name"];           # �Ƒ��̐�

attr_prefix �v���p�e�B�ɂ��A�n�C�t���łȂ� @�i�A�b�g�}�[�N�j�� �v���t�B�b�N�X�Ƃ��Ďg�p�ł��܂��BE4X ���ɂȂ�܂��B

�q�v�f���ɓ����v�f����������o�ꂷ��ꍇ�́A�z��ɓW�J����܂��B

tree.family.children.boy[0];    # ���Z����̖��O
tree.family.children.boy[1];    # ��̖��O
tree.family.children.girl;      # ���̎q�̖��O�i�o���͂��Ȃ��̂Ŕz�񉻂���Ȃ��j

�R���X�g���N�^�E���\�b�h���

  xotree = new XML.ObjTree()

XML.ObjTree �N���X�̃R���X�g���N�^�ł��B
���̂Ƃ���A���Ɉ����͂���܂���B

force_array �v���p�e�B

  xotree.force_array = [ "rdf:li", "item", "-xmlns" ];

XML.ObjTree �I�u�W�F�N�g�̃v���p�e�B�Ƃ��ẮA force_array �����p�”\�ł��B

�f�t�H���g����ł́AXML��JavaScript �I�u�W�F�N�g�i�A�z�z��j�ւ̓W�J���� �q�v�f�̓o��񐔂Ŕz�񉻂��邩�ۂ��������I�Ɍ��肵�܂����A force_array �v���p�e�B�Łu�K���z�񉻂���v�f���E�������v���w��ł��܂��B
force_array �v���p�e�B�Ŏw�肵�Ă��Ȃ��v�f���E�������� �f�t�H���g����Ŏ������ʂ���܂��B

�Ⴆ�΁ARDF �t�@�C���ł́A<rdf:li> �� <item> �v�f�� ������o�ꂷ��”\�������邱�Ƃ��\�ߕ������Ă��܂�����A force_array �v���p�e�B���w�肷�邱�ƂŎ������ʂ�������A �����I�ɔz�񉻂��s���܂��B
�z�񉻂ǂ����̃`�F�b�N���Ȃ��邽�߁A�X�N���v�g�̓��삪�����S�ɂȂ�܂��B
�i�”\�Ȍ��� force_array �v���p�e�B���g�p���邱�Ƃ���������܂��j

attr_prefix �v���p�e�B

  xotree.attr_prefix = '@';

XML �̑����� JavaScript �̃I�u�W�F�N�g�ɓW�J�����ۂ̎��ʗp�̃v���t�B�b�N�X������ �w�肵�܂��B�f�t�H���g�́u-�v���p�n�C�t���ł��B �u@�v���w�肷��ƁA ECMAScript for XML (E4X) ���ɂȂ�܂��B
�Ȃ��Aattr_prefix �͕K���P�����Ŏw�肵�܂��B�i��E2�����`�͖����j

parseXML() ���\�b�h

  tree = xotree.parseXML( xmlsrc );

parseXML ���\�b�h�́A XML �\�[�X�R�[�h���p�[�X���āAJavaScript �I�u�W�F�N�g�i�A�z�z��j�ɓW�J���܂��B

�Ȃ��AXML �\�[�X�R�[�h���� DOM �ւ̓W�J�̓��������ł́A Firefox ���ł� DOMParser �N���X�𗘗p���Ă��܂��B IE �ł́AActiveX �� XMLDOM �𗘗p���Ă��܂��B XML::TreePP �Ƃ͈قȂ�A���O�ŕ������͍͂s���Ă��܂���B

parseDOM() ���\�b�h

  tree = xotree.parseDOM( domnode );

parseDOM ���\�b�h�́A DOM �c���[���p�[�X���āAJavaScript �I�u�W�F�N�g�i�A�z�z��j�ɓW�J���܂��B
��ɁAXMLHTTPRequest �� responseXML.documentElement �� �w�肷�邱�Ƃ�z�肵�Ă��܂��B
XML �t�@�C���S�̂łȂ��āAXML ����擾���� DOM �c���[�̈ꕔ���݂̂� �W�J����ꍇ�ɂ����p�ł��܂��B

����ȊO�̗p�r�Ƃ��ẮA �\�����Ă��� HTML �y�[�W���g�� DOM �Ȃ̂ŁA���̂܂܎w��ł����肵�܂��B
�i�� Opera �� HTML �̑��������啶���ɂȂ��Ă�����A�݊������Ȃ��č���܂��c�j

parseHTTP() ���\�b�h�i�������[�h�j

  tree = xotree.parseHTTP( url, options );

parseHTTP ���\�b�h�́A �E�F�u�T�[�o���� XML �t�@�C������M���āAJavaScript �I�u�W�F�N�g�i�A�z�z��j�ɓW�J���܂��B
�����I�ɁA JSAN �� HTTP.Request �N���X�܂��� prototype.js �� Ajax.Request �N���X�𗘗p���܂��B
HTTP/Request.js �܂��� prototype.js �̂ǂ��炩�̃t�@�C���� �\�߃��[�h���Ă����K�v������܂��B

�Ȃ��A�u���E�U�̃Z�L�����e�B�����ɂ��A�\�����Ă��� HTML �t�@�C���Ƃ͈Ⴄ �h���C����ɂ��� XML �t�@�C���ւ̓A�N�Z�X�ł��Ȃ��̂ł����ӂ��������B

��1�����́AXML�t�@�C����URL���w�肵�܂��B
�������A�ÓI��XML�t�@�C���łȂ��ACGI �Ȃǂ̌Ăяo���ł��\���܂���B

��2�����́AHTTP.Request�^Ajax.Request �N���X�̃I�v�V�����I�u�W�F�N�g���w�肵�܂��B
method, postBody, parameters, onLoading �v���p�e�B�Ȃǂ��w��ł��܂��B
�P���� GET ���\�b�h���g�p����ꍇ�́A�� {} �ɂ��邩�ȗ��ł��܂��B
POST ���\�b�h���g�p����ꍇ�́ApostBody �� parameters ���w�肵�Ă��������B

XMLHTTPRequest �̓������[�h�isync�j�ŒʐM���s�����߁A �T�[�o����̃��X�|���X����������̂�҂��Ă���W�J�������s���܂��B ���̔񓯊����[�h�iasync�j�𗘗p���������A���쐫�����サ�܂��B

parseHTTP() ���\�b�h�i�񓯊����[�h�j

  xotree.parseHTTP( url, options, callback );

XMLHTTPRequest �̔񓯊����[�h�iasync�j�ŒʐM���s���܂��B
�ʐM������҂�����parseHTTP���\�b�h���̂͏I�����āA���̍s�̏����ɐi�݂܂��B
XML �̎�M������������(onComplete�C�x���g)�ɁA ��3�����Ŏw�肵���R�[���o�b�N�֐����Ăяo����܂��B

�R�[���o�b�N�֐��́A ��1������XML�t�@�C���̓��e��W�J����JavaScript�I�u�W�F�N�g�A ��2������XMLHTTPRequest�C���X�^���X��t���ČĂяo����܂��B

writeXML() ���\�b�h

  xmlsrc = xotree.writeXML( tree );

writeXML ���\�b�h�́A JavaScript �I�u�W�F�N�g�i�A�z�z��j���� XML �\�[�X�R�[�h�𐶐����܂��B
XML-RPC �̃��N�G�X�g�{�f�B�Ȃǂɗ��p�ł��܂��B

�T���v���E�v���O����

�e�L�X�g�m�[�h�Ƒ����l

�e�L�X�g�m�[�h�݂̗̂v�f��A�e�L�X�g�m�[�h�������Ȃ��v�f�� JavaScript �I�u�W�F�N�g�Ƃ��ĒP���ɓW�J����܂����A �e�L�X�g�m�[�h�Ƒ����̗��������—v�f�� �e�L�X�g�m�[�h�Ǝq�v�f�����—v�f�̏ꍇ�A �e�L�X�g�m�[�h�̒l��P����JavaScript�I�u�W�F�N�g�̃v���p�e�B�l�Ƃ��Ă� �i�[�ł��Ȃ����߁A #text �Ƃ����v���p�e�B���ɓW�J����܂��B

var xotree = new XML.ObjTree();
var xmlsrc = '<span class="author">Kawasaki Yusuke</span>';
var tree = xotree.parseXML( xmlsrc );
var class = tree.span["-class"];        # �������̐擪�� -
var name  = tree.span["#text"];         # �e�L�X�g�m�[�h

parseHTTP() �{GET���\�b�h�{�������[�h(sync)

�ȉ��̃T���v���́Aindex.html�i�^�O�̕‚��Y�ꓙ���Ȃ����́j�� <html> �v�f�� lang="�`" �����̒l��\�����܂��B

var xotree = new XML.ObjTree();
var url = "http://example.com/index.html";
var tree = xotree.parseHTTP( url );
alert( tree.html["-lang"] );

�Ȃ��AparseHTTP() ���\�b�h���Ăяo���O�ɁA �\�� HTTP/Request.js or prototype.js �����[�h���Ă����K�v������܂��B

parseHTTP() �{POST���\�b�h�{�񓯊����[�h(async)

�ȉ��̃T���v���́A �g���b�N�o�b�Nping �𑗐M���āA���̕Ԃ�l��\�����Ă��܂��B

var xotree = new XML.ObjTree();
var url = "http://example.com/mt-tb.cgi";
var opts = {
    postBody:   "title=...&excerpt=...&url=...&blog_name=..."
};
var func = function ( tree ) {
    alert( tree.response.error );
};
xotree.parseHTTP( url, opts, func );

parseHTTP() ���\�b�h�̑�3�����Ƃ��āA �R�[���o�b�N�֐��i�����t�@���N�V�����j���w�肵�Ă��܂��B
���̃R�[���o�b�N�֐��́AonComplete �C�x���g���ɌĂяo����܂��B

�Ȉ� RSS ���[�_�[

�ȉ��̃T���v���́A�ȈՓI�� RSS ���[�_�[�ł��B
RDF �t�@�C������M���āA�e�L���� <div> �v�f�ŕ��ׂĕ\�����܂��B

var xotree = new XML.ObjTree();
xotree.force_array = [ "rdf:li", "item" ];
var url = "http://example.com/news-rdf.xml";
var func = function( tree ) {
    var elem = document.getElementById("rss_here");
    for( var i=0; i<tree["rdf:RDF"].item.length; i++ ) {
        var divtag = document.createElement( "div" );
        var atag = document.createElement( "a" );
        atag.href = tree["rdf:RDF"].item[i].link;
        var title = tree["rdf:RDF"].item[i].title;
        var tnode = document.createTextNode( title );
        atag.appendChild( tnode );
        divtag.appendChild( atag );
        elem.appendChild( divtag );
    }
};
xotree.parseHTTP( url, {}, func );

XML-RPC ���N�G�X�g�̑��M

�ȉ��̃T���v���ł́AwriteXML() ���\�b�h�Ő������� weblogUpdates.ping �� XML-RPC ���N�G�X�g���A prototype.js �𗘗p���ăT�[�o�ɑ��M���A ���̕Ԃ�l�iXML�j�� parseDOM() ���\�b�h�Ŋm�F���Ă��܂��B

var xotree = new XML.ObjTree();
var reqtree = {
    methodCall: {
        methodName: "weblogUpdates.ping",
        params: {
            param: [
                { value: "Kawa.net xp top page" },  // 1st param
                { value: "http://www.kawa.net/" }   // 2nd param
            ]
        }
    }
};
var reqxml = xotree.writeXML( reqtree );       // JS-Object to XML code
var url = "http://example.com/xmlrpc";
var func = function( req ) {
    var resdom = req.responseXML.documentElement;
    xotree.force_array = [ "member" ];
    var restree = xotree.parseDOM( resdom );   // XML-DOM to JS-Object
    alert( restree.methodResponse.params.param.value.struct.member[0].value.string );
};
var opt = {
    method:         "post",
    postBody:       reqxml,
    asynchronous:   true,
    onComplete:     func
};
new Ajax.Request( url, opt );

prototype.js �𒼐ڌĂ΂��ɁAparseHTTP()���\�b�h�𗘗p�������� �X�N���v�g�̓V���v���ɂȂ�܂����Aprototype.js ���D����������A �������ڍׂ����������s�������ꍇ�ɂ́AparseDOM()���\�b�h�̕���������������܂���B

JKL.ParseXML�Ƃ̔�r

XML.ObjTree �̑O�g�ł��� JKL.ParseXML �N���X�ijkl-parsexml.js�j�́A XMLHTTPRequest �ւ̃��b�p�[���[�`����������Ă��܂��B
���̃��b�p�[�́AIE �ł͏󋵂ɉ����� Microsoft.XMLDOM�iDOMDocument�j�𗘗p���邱�Ƃ� Content-Type: ���e��� �ɑΉ�����ȂǁA�ׂ����z��������܂��B

XML.ObjTree�N���XJKL.ParseXML�N���X
���J�J�n2006/04/062005/05/18
���C�u�����ˑ��֌W parseHTTP() ���\�b�h�̂݁A HTTP.Request �N���X
�܂��� prototype.js �̂����ꂩ���K�v
����ȊO�̃��\�b�h�ł͈ˑ��Ȃ��B�P�̂�OK
�ˑ����C�u�����Ȃ�
�P�݂̂̂ŗ��p�”\
XML�\�[�X�R�[�h��JS�I�u�W�F�N�g �� parseXML()�őΉ� �~ ��Ή�
DOM�c���[��JS�I�u�W�F�N�g �� parseDOM()�őΉ� �� parseDocument()�őΉ�(����J)
�O��XML�t�@�C����JS�I�u�W�F�N�g �� parseHTTP()�őΉ� �� parse()�őΉ��i���ꂪ���C���@�\�j
JS�I�u�W�F�N�g��XML�\�[�X�R�[�h �� writeXML()�őΉ� �~ ��Ή�
XML�ȊO�̌`����JS�I�u�W�F�N�g �~ ��Ή� �� �T�u�N���X�Ŋe�`���ɑΉ�
application/rdf+xml�� �� �u���E�U�ˑ� �� �ł��邾���Ή�

JKL.ParseXML �N���X�� �T�u�N���X �Ȃǂ̊g���� XMLHTTPRequest �̃��b�p�[�p�r���u�����Ă���̂ɑ΂��A XML.ObjTree �N���X�� XMLHTTPRequest �̃��b�p�[�͊����̑��N���X�ɔC���āA XML �R�[�h�������܂߂� XML �����ɓ��������N���X�ƂȂ��Ă��܂��B

prototype.js �⑼�� JSAN �n�N���X�Ƃ̐e�a���́AXML.ObjTree �N���X�̕��������ł��B
�t�ɁA������Ɣ����� XMLHTTPRequest ���܂߂ăV���v���Ɏg�������ꍇ�� JKL.ParseXML �N���X���K���Ă��邩�Ǝv���܂��B

�X�V����

2006/08/14 - �o�[�W����0.24
IE �Ȃǂ𗘗p�����ۂ� parseHTTP() ���\�b�h�� ���[�J���̃t�@�C�����p�[�X���₷���Ȃ�܂����B
responseXML ���擾�ł��Ȃ��ꍇ�́AresponseText �o�R�Ńp�[�X���܂��B (thanks to Iair Salem)
writeXML() ���\�b�h��boolean���܂ރI�u�W�F�N�g�� �n�����ꍇ�ɃG���[�ɂȂ�o�O���C�����܂����B (thanks to syunduel and James Revillini)
�h�L�������g�� xmlDecl �v���p�e�B�̋L�q��lj����܂����B�i�ȑO���g�p�͉”\�������j
2006/05/26
�I�����C��DEMO�̃y�[�W��ݒu���܂����B ���C�y�ɂ������������B
2006/05/14 - �o�[�W����0.23
Intel Mac �ł� Safari �ł́A DOMParser �I�u�W�F�N�g�� async �v���p�e�B�� read-only �Ȃ̂ɑΉ��B
Intel Mac �ł� Safari �ł́A�o�[�W���� 0.22 �̓u���E�U���N���b�V�����܂��B
PowerPC �ł� Safari ��A���̃u���E�U�ł͉e������܂���B
2006/04/30 - �o�[�W����0.22
force_array �v���p�e�B ��lj����܂����B
'@' ���w�肷��΁AECMA-357 �̕��y��҂����ɁA ECMAScript for XML (E4X) ����XML�̃I�u�W�F�N�g���p���”\�ɂȂ�܂��B
2006/04/06 - �o�[�W����0.21
JSAN �p�Ƀe�X�g�X�N���v�g�Ȃǂ�lj����A XML.ObjTree �Ƃ��ă��j���[�A�����܂����B
parseXML()   parseDOM()   parseHTTP()   writeXML() ��4���\�b�h�����p�”\�ł��B
2006/02/03 - �o�[�W����0.19
JKL.ParseXML �̈��蓮��o�[�W�����ł��B �iparseHTTP() ���\�b�h�����j
2005/05/18 - �o�[�W����0.01
XML.ObjTree �̑O�g�ł��� JKL.ParseXML �N���X�ijkl-parsexml.js�j�����J���܂����B

�R�����g�͂������ by AjaxCom

���̑��̃y�[�W�ւ̃����N

���̃y�[�W�ւ̃g���b�N�o�b�N by AjaxTB

�g���b�N�o�b�NURL�Fhttp://www.kawa.net/service/tb/ajaxtb.cgi/works/js/xml/objtree.html

Kawa.netxp © Copyright 2006 Yusuke Kawasaki