2011-09-19 6 views
-2

뭔가 잘못되었습니다.XSL 스타일 시트는 구문 분석하지 않습니다 - 왜?

function loadXMLDoc(dname) { 
    if (window.XMLHttpRequest) { 
     var xhttp = new XMLHttpRequest(); 
    } else { 
     var xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xhttp.open("GET",dname,false); 
    xhttp.send(); 
alert(xhttp.responseText); // displays the contents of the document 
alert(xhttp.responseXML.xml); // in IE, displays nothing 
    return xhttp.responseXML; 
} 

xhttp.responseText 경고 내 문서를 표시, 그래서 그것을로드 것을 알고 : W3 스쿨에서 가져온 다음과 같은 자바 스크립트 코드를 사용

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 
<xsl:template match="/"> 


<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<title>Events</title> 
</head> 

<body> 

    <dl> 

    <xsl:for-each select="all/event"> 
     <xsl:sort select="substring(@displayuntil,7,4)" data-type="number" /> <!-- year --> 
     <xsl:sort select="substring(@displayuntil,1,2)" data-type="number" /> <!-- month --> 
     <xsl:sort select="substring(@displayuntil,4,2)" data-type="number" /> <!-- day --> 

     <dt> 
      <xsl:value-of select="@displayuntil" /> 
      -- 
      <xsl:value-of select="@title" /> 
     </dt> 
     <dd> 
      <xsl:value-of select="description" disable-output-escaping="yes" /> 
     </dd> 

    </xsl:for-each> 
    </dl> 


</body> 
</html> 


</xsl:template> 
</xsl:stylesheet> 

을 :이 XSL 파일을 구문 분석하려고 해요. xhttp.responseXML.xml 경고가 비어있어 잘 구성된 XML 파일이 아닙니다.

http://XMLvalidation.com을 통해 실행했는데 오류가 발생하지 않았습니다. 그래서 나는 무엇을 간과 했는가?

+0

나를 위해 작동합니다. 방금 버튼 클릭에 자바 스크립트 코드를 첨부하고 xsl을 서버의 파일에 넣습니다. 버튼을 클릭하면 기본적으로 동일한 내용의 두 가지 경고가 나타납니다. – Cheeso

+0

@Cheeso - 좋습니다 : 내 XSL이 정확한 것 같습니다. 나쁜 : 나는 그 문제가 어디에서 낳을 지 알지 못한다. – Blazemonger

답변

1

나를 위해 작동합니다.

방금 ​​버튼 클릭으로 자바 스크립트 코드를 첨부하고 xsl을 서버의 파일에 넣었습니다. 버튼을 클릭하면 기본적으로 동일한 내용의 두 가지 경고가 나타납니다.

부실 캐시로 실행 중일 수 있습니다. 나는 어제 이것을 만났다. XHR을 사용하여 XML 파일을 가져오고 오래된 복사본을 얻었습니다. xsl을 변경했다면, 웹 페이지가 검색하는 문서가 이전 버전 일 수 있으며, 이는 유효하지 않을 수도 있습니다. 이를 피하려면 ?_<random number>을 URL에 추가하십시오.

또한 함수에서 한 번만 var을 선언해야합니다. Javascript에서 vars는 함수 범위를 가지므로 var 선언을 어디에 두든지 변수 이름을 함수 전체에서 알 수 있습니다. 즉, 함수를 사용하는 위치에 관계없이 함수의 맨 위에 모든 변수를 넣는 것이 좋은 코딩 스타일입니다. 사실 그것은 if 절과 else 절에서 같은 이름을 가진 var을 선언하는 충돌입니다. 나는 JS 엔진이 그것에 대해 무엇을 할 것인지 모르지만, 엄격하게 말하면 분별력이 없다. 그래도 쉽게 변경할 수 있습니다.

수정 - 마지막으로 업데이트 된 ProgId를 사용해야합니다. 자세한 내용은 this blog post from Microsoft을 참조하십시오. 실제로 당신은 설명이 필요하지 않습니다, 단편 소설은 Microsoft.XMLHTTP이 잘못되었습니다. 당신이 사용해야하는 것은 MSXML2.XMLHTTP입니다. 내 코드는 다음과 같습니다 이러한 변경으로

: 그 노 캐시 트릭 후 작동하지 않는 경우

function loadXMLDoc(dname) { 
    var xhr = null, 
     d = new Date(), 
     noCacheUrl = dname + "?_=" + d.valueOf(); 

    // if the original document is mblase.xsl, then the "no cache" url will be 
    // sth like mblase.xsl?_399383932 , where the number varies for each request. 
    // The 'query string' will be discarded and you will get the same static file. 
    // This insures that you always get a fresh copy of the xsl document. 
    if (window.XMLHttpRequest) { 
     xhr = new XMLHttpRequest(); 
    } else { 
     xhr = new ActiveXObject("MSXML2.XMLHTTP"); // current, correct ProgId 
    } 
    xhr.open("GET",noCacheUrl,false); 
    xhr.send(); 
    alert(xhr.responseText); // displays the contents of the document 
    alert(xhr.responseXML.xml); // displays an indented version of the XSL document 
    return xhr.responseXML; 
} 

당신은 더 진단해야합니다. 이 문제를 진단하려고한다면 XSL 파일을 간단하게 만들 것입니다. 매우 단순한 XML 파일로 만들고 작동시킬 수 있는지 확인하십시오. 그런 다음 점차적으로 복잡성을 다시 추가하십시오. 그러면 잘못된/잘못된 XML 문제를 피하거나 배제 할 수 있습니다.

+0

나는 내 XSL을 아래로 벗겨 내려고 노력했다 : ' - 개선 안해. – Blazemonger

+0

최신 편집 확인 - 업데이트 된 ProgId를 사용해야합니다. – Cheeso

+0

내 text.xsl 파일을 다른 변경없이 test.xml로 변경하고 내 JavaScript를 적절하게 수정하여 모든 것을 해결했습니다. 분명히 내 회사의 서버는 올바른 헤더가있는 * .xsl 파일을 보내지 않습니다. 나는 잘못된 길에서 벗어나기 위해 시간을내어 주신 것에 대한 답을 주셨습니다. – Blazemonger

관련 문제