2011-12-13 1 views
0

내 페이지에 탐색 버튼을 넣으려고하는데 콘텐츠 파일을로드하지만 이러한 파일은 XML이고 XSL 변환으로 스타일을 지정해야합니다. 나는 과거에 w3schools.com의 클라이언트 코드에서 XSL을 사용하여 성공을 거두었으므로 아래에서이를 적용했습니다. 그러나, 뭔가 내 javascript 및 jquery, 또는 어쩌면 내가 매개 변수를 올바르게 전달하지 않는 함께 작동하지 않는 것으로 보입니까? 파이어 버그는 'xsl'변수를로드 할 수 없다고 알려줍니다. 이 문법이 잘못된 것 같습니까? 나는 이것에 아주 새롭고, 내가 뭘 잘못하고 있는지 알 수 없다. 은 DisplayResults 기능은 당신이 기능을 전달하는 파일 이름을 처리하는 것 xml 형식의 문서를 처리되지 않도록javascript와 jquery를 XSL 변환 또는 함수 매개 변수를 사용하여 혼합하는 문제가 있습니까?

<script> 
$(document).ready(function(){ 
    $("#aboutTextButton").click(function(){ 
     $('#contentContainer').load('about-text.html'); 
    }); 
    $("#aboutProjectButton").click(function(){ 
     $('#contentContainer').load('about-project.html'); 
    }); 
    $("#catalogButton").click(function(){ 
     displayResult("catalog.xml","xml-style2.xsl"); 
    }); 
    $("#transcriptionButton").click(function(){ 
     displayResult("behaviour.xml","xml-style2.xsl"); 
    }); 
}); 

//script to transform XML, adapted from w3schools.com 
function loadXMLDoc(dname) 
{ 
if (window.XMLHttpRequest) 
    { 
    xhttp=new XMLHttpRequest(); 
    } 
else 
    { 
    xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xhttp.open("GET",dname,false); 
xhttp.send(""); 
return xhttp.responseXML; 
} 

function displayResult(xml, xsl) 
{ 
// code for IE 
if (window.ActiveXObject) 
    { 
    ex=xml.transformNode(xsl); 
    document.getElementById("example").innerHTML=ex; 
    } 
// code for Mozilla, Firefox, Opera, etc. 
else if (document.implementation && document.implementation.createDocument) 
    { 
    xsltProcessor=new XSLTProcessor(); 
    xsltProcessor.importStylesheet(xsl); 
    resultDocument = xsltProcessor.transformToFragment(xml,document); 
    document.getElementById("contentContainer").appendChild(resultDocument); 
    } 
} 
</script> 
</head> 

<body> 

    <div id="headerImg"> 
     <img src="cover.jpg"> 
    </div> 

    <div id="menu"> 
     <ul> 
      <li><a id="aboutTextButton">About the Text</a></li> 
      <li><a id="aboutProjectButton">About the Project</a></li> 
      <li><a id="catalogButton">Browse the Images</a></li> 
      <li><a id="transcriptionButton">Read the Text</a></li> 
     </ul> 
    </div> 

    <div id="contentContainer"> 
    </div> 
+0

MDN 사이트의 [이 페이지보기] (https://developer.mozilla.org/en/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations) ".importStylesheet()"를 잘못 사용했습니다. – Pointy

+1

자바 스크립트를 통해 적용된 XSL 변환이 자주 표시되지 않습니다. 대부분의 경우, xml을 브라우저로 직접 보내고 브라우저가 다음과 같은 처리 명령어를 사용하여 xslt를 처리하도록 할 수 있지만 페이지가 전송되기 전에 서버에서 처리됩니다.'

+0

다른 많은 사람들이 그것에 대해 묻는 것을 보았습니다. 이제는 더 일반적 일 수 있습니다. 어쨌든 실제로 javascript로 xsl을 적용해야하는지 여부를 고려하십시오. 서버에 적용하는 것이 더 좋을 수도 있고 브라우저에서 자바 스크립트를 사용하지 않고 수행하는 것이 더 나을 수도 있습니다. –

답변

2

당신은 loadXMLDoc를 호출하지 않습니다. displayResult의 첫 번째 줄은 다음과 같아야합니다.

xml = loadXMLDoc(xml); 
xsl = loadXMLDoc(xsl); 

코드가 작동해야합니다.

+0

고마워, 그게 문제 야. – Jono

관련 문제