지난 며칠 동안 xml을 xhtml로 변환하기 위해 xslt를 연구했습니다. 이전 기사에서는 xml을 xhtml로 구문 분석하기 위해 xslt를 사용하는 방법을 소개했습니다.
이전 방법으로 인해 xslt가 필요합니다. xml 파일 내부 및 프로젝트에서 직접 가져옵니다. 사용되는 xml 파일은 시스템에서 생성되며 경로만 제공할 수 있지만 xml의 내용을 다시 작성할 수 있는 방법이 없으므로 연결 방법을 찾아야 합니다. xml 및 xslt를 외부적으로 사용하면 목적을 달성할 수 있을 뿐만 아니라 관리하기 쉽도록 여러 xml 파일에도 적용할 수 있습니다.
코드부터 시작하겠습니다. 모듈 도구는 js를 패키지하는 데 사용됩니다. 이 도구는 지금만 사용할 수 있으며 연구하지 않았습니다. 기본 기능입니다. 여기서는 클래스에 의해 구현된 클래스와 메서드를 포함하여 js를 파일에 작성합니다.
다음은 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 코드입니다. 🎜>xml의 dom 요소를 생성하는 데에는 xmlDom의 생성자가 사용됩니다. IE와 FF의 경우 dom을 생성하는 방법이 다릅니다. 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"]의 경우 다음을 사용하세요. 반복하여 해당 버전을 찾은 다음 new ActiveXObject(arrSignatures[i])를 사용하여 dom을 만듭니다.
탐색하는 경우 서버가 XML DOM 개체를 지원하지 않으면 오류가 발생합니다.
transformXSLT 생성자는 XSLT를 사용하여 xml을 html로 변환합니다. FF에는 변환Node 메서드가 없으므로 우리가 직접 메서드를 구성했습니다.<!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>
위 내용은 xml을 xhtml로 구문 분석하는 TransformBinder 클래스의 인스턴스 메서드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!