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�́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
.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>
�܂��́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,"&").replace(/</g,"<").replace(/>/g,">");
document.write( "xml: "+xml );
// --></script>
</body>
</html>
�l�I�ɂ́AJSAN ���g�킸�ɁA<script> �v�f�Ŗ����I�ɓǂݍ�����������₷���Ǝv���܂��B
�ȉ��̂悤��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
xotree = new XML.ObjTree()
XML.ObjTree �N���X�̃R���X�g���N�^�ł��B
���̂Ƃ���A���Ɉ����͂���܂���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
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
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
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
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
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
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
�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
�ȉ��̃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
�ȉ��̃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
�ȉ��̃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 );
�ȉ��̃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
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���X | JKL.ParseXML�N���X | |
|---|---|---|
| ���J�J�n | 2006/04/06 | 2005/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
�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