Firefox는 외부 엔티티에서 XSLT를 수행합니까?
문제
내가하려는 것은 XML 문서를 가져가는 것입니다. http://example.org/data.xml XSL 스타일 시트를 적용하여 보여줍니다. (문서 자체를 수정하고 지침을 추가 할 수 없습니다)
따라서 다음과 같은 유틸리티 XML 파일이 있습니다.
Wrapper.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
<!ENTITY content SYSTEM "http://example.org/data.xml">
]>
<?xml-stylesheet type="text/xsl" href="unwrap.xsl" ?>
<wrapper>
&content;
</wrapper>
unprap.xsl :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="stylesheet.xsl"/>
<xsl:template match="/wrapper/node()[1]">
<xsl:apply-imports/>
</xsl:template>
</xsl:stylesheet>
요약 : stylesheet.xsl이 작성되었습니다 http://example.org/data.xml, 브라우저는 Wrapper.xml을 가리키고 사용자는 변환 된 것을 볼 수 있습니다. http://example.org/data.xml.
이것은 IE (및 Chrome)에서 예상대로 작동하지만 Firefox에서 예상대로 작동하는 드문 경우 중 하나입니다.
Afaik Firefox는 외부 XML 엔티티를 지원하지만 XSL 코드에서는 보이지 않는 것 같습니다. 나는 찾았다 이 기사 2006 년부터 Firefox 1.5 에서이 문제를 설명합니다 (3.5.3을 사용하고 있습니다).
이것에 대한 해결 방법이 있습니까?
해결책
현재 Firefox는 보안 및 서비스 거부 문제로 인해 외부 DTD 및 엔티티 참조를로드하지 않습니다. 예를 들어: http://en.wikipedia.org/wiki/billion_laughs
개방이 있습니다 모질라 버그 그 이유와 오랜 논쟁을 설명 할 수 있는지에 대한 토론 : 구성 가능한 것을 만들 수 있는지 여부에 대한 논쟁 : https://bugzilla.mozilla.org/show_bug.cgi?id=22942
DTD로드하는 데 하나의 해결 방법이있는 것 같습니다., 하지만 아마도 당신을위한 실행 가능한 해결책이 아니라고 생각합니다.
Firefox가로드됩니다 현지의 DTD 파일
Windows 용이 디렉토리에 넣으면 다음과 같습니다.
C:\Program Files\Mozilla Firefox\res\dtd\...
Linux 디렉토리 :
/**mileage may vary**/MozillaFirefox/lib/res/dtd/
엔티티 참조를 사용하는 한 가지 아이디어 :Wrapper.xml의 내용을 제어 할 수 있다면 내용을 가져올 수 있습니다. http://example.org/data.xml 스타일 시트 처리 명령어를 추가하여 (동적 서버 측 기능이 있다고 가정) (서버 측) 및 래퍼 파일의 전체 내용으로 반영합니다.