Article View: cn.bbs.comp.xml
Article #284��xslt��ʽ��xml����Ϊxhtml(ת��)
From: <Test/>
Date: Tue, 24 Nov 2009 15:29
Date: Tue, 24 Nov 2009 15:29
169 lines
9566 bytes
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
--
[1;36mHappy XMLing
[m[1;35m�� ��Դ:��ˮľ���� newsmth.net��[FROM: 114.249.220.*][m
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!NEWSMTHShow 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