🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.xml
Article #284

��xslt��ʽ��xml����Ϊxhtml(ת��)

#284
From: <Test/>
Date: Tue, 24 Nov 2009 15:29
169 lines
9566 bytes
�⼸��һֱ���о�xsltת��xmlΪxhtml��ǰ�������н��� ʹ��xslt��xml������xhtml �����£�

����ǰ��ķ���xslt��Ҫ��xml�ļ��ڲ�ֱ�ӵ��룬����Ŀ���õ���xml�ļ���ϵͳ��ɵģ�ֻ���ṩ·������û�а취��дxml��������ݣ�������Ҫ��һ�������ܹ����ⲿ��xml��xslt������һ������ȴﵽ��Ŀ�ģ�Ҳ����Ӧ���ڶ��xml�ļ���������?

���ϴ��룬ϵͳ��ʹ��module���js���д��module���������ר��������js���д����������Ժ�������������ܣ����Լ�����ֻ��ʹ�ã���û�о���ײ�Ĵ��룻������ǽ�jsд��һ���ļ����棬�������Լ���ʵ�ֵķ�����
������js���룺transform.js


var XmlDom=function(){
    if (window.ActiveXObject) { // IE
        var arrSignatures = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",  
                            "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",  
                            "Microsoft.XmlDom"]; 
                          
        for (var i=0; i < arrSignatures.length; i++) {  
            try {                 
                 var oXmlDom = new ActiveXObject(arrSignatures[i]);                   
                 return oXmlDom;                 
            } catch (oError) {  
                     //ignore  
            }  
        } 
        
        throw new Error("���ϵͳû�а�װ MSXML."); 

    } else if(document.implementation.createDocument){  // Firefox

        var oXmlDom = document.implementation.createDocument("", "", null);
    
        return oXmlDom;

    } else{
        throw new Error("�������֧�� XML DOM object.");
    }
        
}

var transformXSLT=function(_XML,_XSL) {
    
    if (window.Node) {
        Node.prototype.transformNode = function(XslDom) {
            var oProcessor = new XSLTProcessor();
            oProcessor.importStylesheet(XslDom);
            var oResultDom = oProcessor.transformToDocument(myXmlDom);
            
            var oSerializer = new XMLSerializer();
            var sXml = oSerializer.serializeToString(oResultDom, "text/xml");
            
            return sXml;
        }
    }
    var myXmlDom = new XmlDom();
    myXmlDom.async=false;
    var myXslDom = new XmlDom();
    myXslDom.async=false;
    myXmlDom.load(_XML);
    myXslDom.load(_XSL);
    
    var sResult=myXmlDom.transformNode(myXslDom);

    if(window.ActiveXObject){
        if(myXmlDom.parseError.errorCode != 0){
            var sError=myXmlDom.parseError;
            var txt = "";
            txt += "<br>������룺 ";
            txt += sError.errorCode;
            txt += "<br>����ԭ�� ";
            txt += sError.reason;
            txt += "<br>�����кţ� ";
            txt += sError.line;
            document.write(txt);
        }else{
            document.write(sResult); 
        }        
    } else if(document.implementation.createDocument){

        var oSerializer = new XMLSerializer();
        var sXmlDom = oSerializer.serializeToString(myXmlDom, "text/xml");
        var oParser = new DOMParser();
        var oXmlDom = oParser.parseFromString(sXmlDom,"text/xml");
        if (oXmlDom.documentElement.tagName == "parsererror") {
            var oXmlSerializer = new XMLSerializer();                
            var sXmlError = oXmlSerializer.serializeToString(oXmlDom);
            alert(sXmlError);

        } else {
            document.write(sResult);
        }
    }
}

var TransformBinder = function(XML,XSL) {
    this.XML = XML;
    this.XSL = XSL;
}
TransformBinder.prototype.registerAction = function(handlers) {
    this.handlers = handlers;
}
TransformBinder.prototype.bind = function() {
    var _this = this;                
    this.handlers(_this.XML,_this.XSL);    
}
 

������html���룺XSLTtransform.htm


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type='text/javascript' src="transform.js"></script>
        
    </head>

    <body>    
        <script type="text/javascript">        
            var XML = "��������XML·��";
            var XSL = "��������XSL·��";
            var tempObj = new TransformBinder(XML,XSL);
            tempObj.registerAction(transformXSLT);
            tempObj.bind();
        </script>    
    </body>
</html>

����һ��transform.js��

xmlDom������캯������������xml��domԪ�أ�����IE��FF������dom�ķ�����һ��IE����window.ActiveXObject�����������������FF��document.implementation.createDocument����������������������������������ж���IE����FF��

IE����Բ�ͬ�汾��xml["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument","Microsoft.XmlDom"]����forѭ�����б�����ҵ���Ӧ�İ汾��new ActiveXObject(arrSignatures[i])����dom��

FF����document.implementation.createDocument("", "", null);ֱ�Ӵ���dom ��

����������֧�� XML DOM object��throw���� ��

 

transformXSLT������캯����XSLT��xmlת����html��FF��û��transformNode������������������Լ�������һ��������


Node.prototype.transformNode = function(XslDom) {
            var oProcessor = new XSLTProcessor();
            oProcessor.importStylesheet(XslDom);
            var oResultDom = oProcessor.transformToDocument(myXmlDom);
            
            var oSerializer = new XMLSerializer();
            var sXml = oSerializer.serializeToString(oResultDom, "text/xml");
            
            return sXml;
        }
Ȼ�����������ʵ��ת�����ڴ��������IE��FF���в�ͬ�Ĵ��?����IE�Ƚϼ򵥣���һ��parseError����װ�ش�����Ϣ��errorCode�Ǵ���Ĵ��룬reason�Ǵ���ԭ��line�Ǵ�����кţ���������һЩ��Ϣ������ֻҪ��ʾ��Ҫ�Ĵ�����Ϣ�Ϳ����ˣ��������˾���ʾ�������ݣ����û�г�������ʾת���Ľ��sResult��FF�¾ͱȽϸ���һ�㣬��XMLSerializer��XMLSerializer.serializeToString()��xmlDomת��Ϊ�ַ��ٽ��ַ�ת����dom������ת���Ĺ�������?���ܵõ�����parsererror����Ϣ���жϵõ����ַ��tagName�Dz���parsererror���������dom������ת�����ַ��׳��ַ��е����ݣ����������ʾת���Ľ��sResult��

�����м���ע��㣺
a.IE�ܼ����XML��DTD���󣬶�FF��ֻ�ܼ����XML������﷨����

b.��Ϊ��Ҫ����������жϴ������յĽ��úϲ������ܴ���ṹ�Ͽ�������̫���?��Ҳ������֮�١�

 

��TransformBinder�������з�װ��������չ���޸ġ�TransformBinder.prototype.registerAction���ԭ������ע���¼�������TransformBinder.prototype.bind���¼����а󶨣���Ҫʹ��������ʱ��ֻ��Ҫnew TransformBinder(XML,XSL),ע��transformXSLT�¼�����bind���а󶨣������ʵ�����Ч���ˡ������Ҫ��չ���ٴ����µĹ��캯��ע�Ტ�󶨵�������ϾͿ���ʵ��Ч��
 ---------------------------------------------------------------------------
����ת�ԣ� http://www.cnblogs.com/huashengjam/archive/2009/11/24/1603643.html
--
Happy XMLing


�� ��Դ:��ˮľ���� newsmth.net��[FROM: 114.249.220.*]
Technical Details
Message-ID: <4j8g8j$F4N@newsmth.net>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!news1.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsgate.cuhk.edu.hk!news.neu.edu.cn!news.byr.edu.cn!news.newsmth.net!NEWSMTH

Show Full Headers
Complete Article Headers
X-Google-Thread: f7ebf7e2af,36cf79e1e356eaa,start
X-Google-Attributes: gidf7ebf7e2af,public,usenet
X-Google-NewGroupId: yes
X-Google-Language: Chinese,GB
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!news1.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsgate.cuhk.edu.hk!news.neu.edu.cn!news.byr.edu.cn!news.newsmth.net!NEWSMTH
From: thinkhy@newsmth.net-SPAM.no (<Test/>)
Newsgroups: cn.bbs.comp.xml
Subject: ��xslt��ʽ��xml����Ϊxhtml(ת��)
Date: 24 Nov 2009 15:29:23 GMT
Organization: ˮľ����
Message-ID: <4j8g8j$F4N@newsmth.net>
Mime-Version: 1.0
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: 8bit
X-Filename: XML/Y/M.1259076525.g0
Lines: 168