2010-11-22 4 views
2

아래는 브라우저에 반환됩니다Chrome, Firefox 및 Safari에서 XSLT가 적용되지 않습니까? IE는 않습니다!

<?xml version="1.0"?> 
    <?xml-stylesheet type="text/xsl" href="to_xhtml.xslt"?> 
    <root> 
     <value>test data</value> 
    </root> 

크롬 7과 FF 5 만 XML 값을 표시하는 XSLT를 appy 수 없습니다. IE는 결과 XHTML을 보여주는 XSLT를 적용합니다.

XSLT 파일이 존재하고 유효 - 나는 로컬 XML을 였는지를하고 크롬과 파이어 폭스의 결과 XHTML을 열 수 있습니다 ...

웹 서버 IIS 6이며, 그 무엇이든이있는 경우 인터페이스는 PHP 5.3입니다 그걸로?

UPDATE : XSLT :

당신은 페이지가이 경우에 올바른 HTTP 콘텐츠 유형 헤더 값으로 제공됩니다 확인해야
 
<?xml version='1.0'?> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/1999/xhtml"> 

    <xsl:output 
    method='xml' 
    indent='yes' 
    doctype-public='"-//W3C//DTD XHTML Basic 1.1//EN" 
    "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"'/> 

    <xsl:template match="/root"> 
    <html> 
     <head> 
     <title> 
     </title> 
     </head> 
     <body> 
     <p> 
      <xsl:value-of select="value"/> 
     </p> 
    ... 
    </html> 
+1

1. 제공된 Content-Type은 초기 파일입니까? 2. xslt를 표시하십시오. –

+1

@ 미디어 1.php : text/html (Live HTTP 헤더에서 반환)에서 반환되는 기본값은 text/xml이어야한다고 생각하십니까? 2. 위의 XSLT. – markmnl

+0

당신은'method = 'html''와 시도했습니다. –

답변

4

: 사용하여 PHP에서 텍스트/XML 가능 헤더 기능 :

header('Content-type: text/xml'); 
echo $xmlStr; 

* 나를 위해 올바른 방향으로 나를 인도하는 덕분에. 크롬과 사파리도

때문에 상기 DOCTYPE 공공 값의 XSLT를 적용하는 동안 오류가 여전히 발생

<xsl:output 
method='xml' 
indent='yes' 
doctype-public='"-//W3C//DTD XHTML Basic 1.1//EN" 
"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"'/>; 

그것은 같아야

<xsl:output 
    method="xml" 
    indent="yes" 
    doctype-public="-//W3C//DTD XHTML Basic 1.1//EN" 
    doctype-system="http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"/> 

DOCTYPE을 공공 doctype-system이 spec에 따라 지정되지 않은 경우에도 속성을 살펴 봐야합니다.

Doctype-system을 지적하는 LarsH 덕분에 별도의 값을 가져야합니다. DOCTYPE 공공 속성 대하여

+0

유용한 대답, +1. doctype-public의 가치에 대한 수정에 관한 나의 대답을 보라. – LarsH

1

다음 spec에 따르면

는 DOCTYPE 공공 속성 는 DOCTYPE 시스템 않는다면 무시해야 속성이 지정된다.

doctype-public 속성을 가지고 있지만 doctype-system이없는 <xsl:output-method> 요소에 대해 뭔가 이상한 점이 있습니다.

은 어쩌면 당신은 XML의 공공 및 시스템 식별자에 대해
<xsl:output 
    method="xml" 
    indent="yes" 
    doctype-public="-//W3C//DTD XHTML Basic 1.1//EN" 
    doctype-system="http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd" /> 

이상 here을 참조

를 원했다 (즉 충돌 = ... "넘어"?에서 크롬과 사파리를 변명하지 않습니다).

Fx와 Chrome이 XSLT (콘텐츠 유형이 이유였습니다)를 사용하여 XML을 렌더링하지 않는 이유는 분명히 아니지만 문제를 해결하려고하는 것 같습니다.

+0

이유는 Fx와 크롬 렌더링이 Content-Type 이었기 때문에 Copntent-type이 수정 된 후 Chrome과 Safari가 넘어졌습니다 (XSLT 적용을 중지하고 오류 메시지 표시, 지금까지 제작 된 XHTML 표시 - 이 경우에는 아무것도 아님) 내 첫 번째 doctype-public 값으로 XSLT를 적용하여 아포스트로피를 반전하고 따옴표를 사용하여 오류를 해결했습니다. 그러나 당신이 지적한대로 doctype-system을 doctype-public 값과 분리해야합니다 - 감사합니다! 나는 나의 대답을 업데이트 할 것이다. – markmnl

관련 문제