나의 첫번째 Ajax 프로그램 현재 한반도 구름 사진

Astronomy Picture of the Day 페이지 추가


이전 글에 이어서 계속….
바로 밑에 Ajax가 어쩌구 XMLHttpRequest가 저쩌구 했는데,
브라우저간 약간 씩 서로 다른 동작이나, IE인 경우엔 ActiveX 경고창이 뜨고해서,

서버에서 렌더링 해서 내리기로 변경….

코드도 의외로 간단.

$xml = new DomDocument;
$xml->load("http://www.jwz.org/cheesegrater/RSS/apod.rss");

$xsl = new DomDocument;
$xsl->load("apod.xsl");

$proc = new xsltprocessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);

apod.rss와 apod.xsl을 읽어와서
apos.rss를 apod.xsl을 이용해서 렌더링 해서 그냥 화면에 뿌려줌. 끝

apod.xsl파일

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html"/>
	
	<xsl:template match="/rss/channel">
		<xsl:value-of select="pubDate"/> by NASA
		<xsl:value-of select="item/description"
				disable-output-escaping = "yes" />
	</xsl:template>
	
</xsl:stylesheet>

/rss/item/description의 내용이 escape처리된 html 소스인데, 그냥 처리하면 화면에 html 소스가 출력된다.
value-of의 disable-output-escaping 속성 “yes”로 해주어야 한다.(이거 몰라서 한참을 찾았음)


총 7 개의 댓글 혹은 트랙백들이 있습니다.

  1. [...] Hanury.NET (완공 D-?) » Blog Archive » Astronomy Picture of the Day 페이지 추가, June 22nd, 2006 at 12:21 am [...]

  2. alexken, July 3rd, 2006 at 3:08 pm

    7월 1일// 현재 호스팅 맏기고 나서 부터 이 페이지 동작하고 있지 않다.
    DomDocument가 php version 5 부터 도입되었고,
    php version 4에 있는 xslt_create()함수는 호스팅 업체에서 지원 안한다.

    다시 클라이언트 사이드로 내려갈까 말까 고민중…

  3. alexken, July 4th, 2006 at 2:48 am

    결국은 xml에 < ?xml-stylesheet type=\"text/xsl\" href=\"/style/apod.xsl\"? >를 직접 붙이는 방향으로 해결.
    이것의 이점. safari가 javascript에 의한 xslt렌더링을 지원하지 않는다.
    이 방법(xml에 rendering할 xslt를 직접 지정)만이 IE, safari, Firefox 모두 같은 렌더링을 보장하는 유일한 방법임.
    또다른 문제 : FireFox가 아직도 disable-output-escaping을 구현하지 않았다.

    윽 내가 미쳐… 모든 브라우저를 만족시키는게 이리 어렵단 말이냐???

  4. alexken, July 4th, 2006 at 10:20 am

    disable-output-escaping가 W3C recomendation인데도불구,
    불여우가 구현하지 않은 이유는 CDATA로 묶인 검증되지 않은 html chunk를 xml에 추가함으로 인해 발생할 문제 때문이라는데…

    그래도 미워….

  5. alexken, July 4th, 2006 at 10:22 am

    bugzilla에 다음과 같이 등록되어 있다.
    https://bugzilla.mozilla.org/show_bug.cgi?id=98168#c11

  6. alexken, July 4th, 2006 at 11:01 am

    in the XSLT stylesheet, check for the transformiix transformation engine, and if you find it output a javascript block that essentially does “.innerHTML = .innerText” for each of the content blocks.

    즉 javascript로 구현하는게 정답이라네…

    다른 hack이나 workaroud를 더 찾아보자….

  7. alexken, November 11th, 2006 at 12:46 am

    6월달 글이었네…
    지금은 11월이고…

    드디어 해법 찾은 우연히 내가 호스팅 하는 cafe24에서 php에서 system()은 먹는 다는 사실을 알고, 이를 이용하면 웃기는 코드라 할지라도 못하는게 없으리라.
    xml rendering 관련은 그냥 xsltproc으로 죄다 해결, php 코드는 단 1줄.

    음하하

  • 이 댓글 RSS를 통해 새로 올라오는 댓글을 구독할수 있습니다.
    트랙백으로 답글을 보내시려면 아래의 트랙백주소를 사용해 주세요.
    http://hanury.net/wp/archives/116/trackback