관련글 : - xml & xsl] xsl for ktours' xml(sample) to blog... -

몇일 전에 xml 에 관한 text Encoding 을 했는데,

=.=... 그게 InternetExplorer 에서는 어느정도 먹혔(?)지만,
다른 웹브라우져... FireFox, Chrome, Safari 에서는 그저 Text 로만 나왔다.

... 몇몇 검색을 거치다보니

<xsl:value-of select="." disable-output-escaping="yes" />

를 쓰면 어느정도 해결된다고 했는데... 중요한(?) FireFox 에서 위에 있는 DOE(disable-output-escaping)를 지원하지 않는다는 것.

뭐... 그 외의 문제로 DOE 가 골격 자체를 바꾸는 것이라 사용상 주의를 요한다...라고 나와있긴 하지만...

...

OTL... 결국, 다시 원점(?)으로 돌아가
xml 내용 자체를 철저(?)하게 적용하기 위해
<![CDATA[ ]]> 내용을 밖으로 꺼내보기로 했다.

...

Test_1.xml

<?xml version="1.0"?>

<!DOCTYPE xml [
<!ENTITY nbsp " ">
]>

<!-- <?xml:stylesheet type="text/xsl" href="test_1.xsl"?> only IE -->

<?xml-stylesheet type="text/xsl" href="test_1.xsl"?>

<xml>
<summery>
<summeryTop><image Width="540" Height="138">http://cyimg29.cyworld.com/common/file_down.asp?redirect=%2F290022%2F2010%2F3%2F30%2F21%2Fsummery%2Ejpg</image>
<document><b>100328 여의도나들이 Summery...</b><br /><br />여의도...를 가보니 공사 마무리단계인 것 같아서 좋긴 했는데...<br />뭔가...<br /> <br />예전에 놀러오던 새들이 어떻게 생각할지...<br /> <br />NowMark killofki@.<br /><br /></document></summeryTop>
<item num="1"><image aniN="0" Left="0" Top="0" Width="540" Height="51" Owidth="8114" Oheight="768">http://cyimg29.cyworld.com/common/file_down.asp?redirect=%2F290013%2F2010%2F3%2F30%2F41%2F%5FS5030542%5F56%2Ejpg</image>
<document> <b>여의도 남측 조금 건너편에서...</b><br /><br /> <TABLE style="BORDER-BOTTOM: #dedede 1px solid; BORDER-LEFT: #dedede 1px solid; BACKGROUND: url(http://img.cyworld.com/img/map/map_icon.gif) #fff no-repeat 7px 3px; BORDER-TOP: #dedede 1px solid; BORDER-RIGHT: #dedede 1px solid; -moz-border-radius: 10px"><TBODY><TR><TD><A style="COLOR: #666; TEXT-DECORATION: none" id="map_id" href="http://map.cyworld.com/menu/view.map?map_id=854636" name="854636_1" target="_blank" tp_privilege="P"> <DIV style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; PADDING-LEFT: 20px; PADDING-RIGHT: 3px; FONT: 12px 돋움; PADDING-TOP: 3px">대한민국 한강 여의도남측조금건너</DIV> </A></TD></TR></TBODY></TABLE> <br /> <br />지나가다가... 공사가 어느정도(?) 마무리됐음을 느끼고 진입해봤다.<br />뭐랄까... 예전에 봤던 모래사장(?)이 안보인다고 해야하나...<br /> <br />매년 새들이 쉬고가는 장소로 기억하던 곳인데...<br /> <br />NowMark killofki@.<br /> <br /> <a num="1">1) 63빌딩</a><br /><a num="2">2) 원효대교</a><br /><a num="3">3) 한강철교</a><br /><br /> </document><zoom HLeft="1229" HTop="9" HWidth="378" HHeight="399"/><zoom HLeft="1813" HTop="185" HWidth="1772" HHeight="400"/><zoom HLeft="4147" HTop="202" HWidth="1333" HHeight="286"/></item>
<item num="2"><image aniN="0" Left="0" Top="53" Width="540" Height="44" Owidth="9259" Oheight="768">http://cyimg29.cyworld.com/common/file_down.asp?redirect=%2F290024%2F2010%2F3%2F30%2F44%2F%5FS5030557%5F70%2Ejpg</image>
<document><b>여의나루역 앞쪽에서...</b><br /><br /><TABLE style="BORDER-BOTTOM: #dedede 1px solid; BORDER-LEFT: #dedede 1px solid; BACKGROUND: url(http://img.cyworld.com/img/map/map_icon.gif) #fff no-repeat 7px 3px; BORDER-TOP: #dedede 1px solid; BORDER-RIGHT: #dedede 1px solid; -moz-border-radius: 10px"><TBODY><TR><TD><A style="COLOR: #666; TEXT-DECORATION: none" id="map_id" href="http://map.cyworld.com/menu/view.map?map_id=854638" name="854638_1" target="_blank" tp_privilege="P"><DIV style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; PADDING-LEFT: 20px; PADDING-RIGHT: 3px; FONT: 12px 돋움; PADDING-TOP: 3px">대한민국 여의나루역 앞쪽</DIV></A></TD></TR></TBODY></TABLE><br /> <br />공원화가 많이 진행된 느낌이었다...<br />...엥? 예전에도 공원이었는데...<br /> <br />한강 강물쪽으로 가는 진입로가 부드럽게 이어진 느낌...<br /> <br />... 이럴때 왜 귀신영화가 생각나는거지 = =?<br /> <br />NowMark killofki@.<br /> <br /><a num="1">1) 원효대교</a><br /><a num="2">2) 여의나루역앞 계단</a><br /><a num="3">3) 마포대교</a><br /><br /></document><zoom HLeft="1560" HTop="131" HWidth="1797" HHeight="346"/><zoom HLeft="4603" HTop="176" HWidth="384" HHeight="236"/><zoom HLeft="5996" HTop="32" HWidth="2657" HHeight="621"/></item>
<item num="3"><image aniN="0" Left="0" Top="99" Width="486" Height="39" Owidth="9443" Oheight="768">http://cyimg29.cyworld.com/common/file_down.asp?redirect=%2F290019%2F2010%2F3%2F30%2F8%2F%5FS5030571%5F84%2Ejpg</image>
<document><b>여의도공원 한강쪽입구앞에서...</b><br /><br /><TABLE style="BORDER-BOTTOM: #dedede 1px solid; BORDER-LEFT: #dedede 1px solid; BACKGROUND: url(http://img.cyworld.com/img/map/map_icon.gif) #fff no-repeat 7px 3px; BORDER-TOP: #dedede 1px solid; BORDER-RIGHT: #dedede 1px solid; -moz-border-radius: 10px"><TBODY><TR><TD><A style="COLOR: #666; TEXT-DECORATION: none" id="map_id" href="http://map.cyworld.com/menu/view.map?map_id=854639" name="854639_1" target="_blank" tp_privilege="P"><DIV style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; PADDING-LEFT: 20px; PADDING-RIGHT: 3px; FONT: 12px 돋움; PADDING-TOP: 3px">대한민국 한강 여의도공원입구앞</DIV></A></TD></TR></TBODY></TABLE><br /> <br />오면서 보니 강변쪽에 물이 흐르...엥?<br />청계천 시작점처럼 물을 흘려보내는 느낌이었다.<br /> <br />오다보니 한강쪽은 뭔가 넓직...한게<br />물을 흘려보내도 될 것 같...아니, 물을 흘려보내려고 만든 조형물 처럼 보였다.<br /> <br />... 분수와는 다른 형태의 조형물 같기도 하고...<br /> <br />NowMark killofki@.<br /> <br /><a num="1">1) 여의도공원 입구...</a><br /><a num="2">2) 서강대교쪽...</a><br /><a num="3">3) 넓은강조형물...?</a><br /><a num="4">4) 마포대교...</a><br /><a num="5">5) 자전거대여소...</a><br /><br /></document><zoom HLeft="858" HTop="165" HWidth="319" HHeight="235"/><zoom HLeft="2075" HTop="98" HWidth="1962" HHeight="457"/><zoom HLeft="4422" HTop="232" HWidth="941" HHeight="219"/><zoom HLeft="4827" HTop="27" HWidth="2011" HHeight="458"/><zoom HLeft="7101" HTop="214" HWidth="656" HHeight="139"/><zoom HLeft="7846" HTop="8" HWidth="724" HHeight="361"/></item>
<item num="4"><image aniN="0" Left="488" Top="99" Width="52" Height="39" Owidth="1024" Oheight="768">http://cyimg29.cyworld.com/common/file_down.asp?redirect=%2F290010%2F2010%2F3%2F30%2F59%2F%5FS5030585%5F93%2Ejpg</image>
<document><b>보라매공원 쪽문육교 앞에서...</b><br /><br /><TABLE style="BORDER-BOTTOM: #dedede 1px solid; BORDER-LEFT: #dedede 1px solid; BACKGROUND: url(http://img.cyworld.com/img/map/map_icon.gif) #fff no-repeat 7px 3px; BORDER-TOP: #dedede 1px solid; BORDER-RIGHT: #dedede 1px solid; -moz-border-radius: 10px"><TBODY><TR><TD><A style="COLOR: #666; TEXT-DECORATION: none" id="map_id" href="http://map.cyworld.com/menu/view.map?map_id=854642" name="854642_1" target="_blank" tp_privilege="P"><DIV style="TEXT-ALIGN: left; PADDING-BOTTOM: 0px; PADDING-LEFT: 20px; PADDING-RIGHT: 3px; FONT: 12px 돋움; PADDING-TOP: 3px">대한민국 보라매공원 쪽문육교앞</DIV></A></TD></TR></TBODY></TABLE><br /> <br />횡단보도 앞에서 조금 여유(?)를 갖고 찍어봤다.<br /> <br />NowMark killofki@.<br /> <br /><a num="1">1) 신대방옆 앞길</a><br /><a num="2">2) 보라매공원 쪽문육교앞</a><br /><br /></document><zoom HLeft="383" HTop="336" HWidth="225" HHeight="185"/><zoom HLeft="689" HTop="311" HWidth="329" HHeight="229"/></item></summery>
</xml>


...

test_1.xsl

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" />

<xsl:template match="/">

<xsl:element name="html">

<xsl:element name="head">
</xsl:element>

<xsl:element name="body">

<xsl:element name="style">
body { font-size:9pt; font-family:굴림; }
</xsl:element>

<xsl:apply-templates select="//summeryTop" />
<xsl:apply-templates select="//item" />

</xsl:element>

</xsl:element>

</xsl:template>

<xsl:template match="summeryTop">
<xsl:apply-templates select="image" />
<xsl:element name="br" />
<xsl:element name="br" />
<xsl:apply-templates select="document" />
<xsl:element name="br" />
<xsl:element name="br" />
<xsl:element name="br" />
</xsl:template>

<xsl:template match="item">
<xsl:apply-templates select="image" /><br />
<xsl:element name="br" />
<xsl:element name="br" />
<xsl:apply-templates select="document" /><br /><br />
<xsl:element name="br" />
<xsl:element name="br" />
<xsl:element name="br" />
</xsl:template>

<!-- image-->
<xsl:template match="image">

<xsl:param name="Ow" select="@Owidth" />
<xsl:param name="Oh" select="@Oheight" />

<xsl:element name="img">

<xsl:choose>

<!-- when summery Top -->
<xsl:when test="name(..)='summeryTop'">

<xsl:attribute name="width">
<xsl:value-of select="@Width" />
</xsl:attribute>

<xsl:attribute name="height">
<xsl:value-of select="@Height" />
</xsl:attribute>

</xsl:when>

<!-- when not summeryTop -->
<xsl:otherwise>

<xsl:choose>

<!-- Owidth bigger than 640 -->
<xsl:when test="$Ow>640">
<xsl:attribute name="width">
640
</xsl:attribute>
<xsl:attribute name="height">
<xsl:value-of select="floor(($Oh * 640) div $Ow)" />
</xsl:attribute>
</xsl:when>

<!-- not bigger than 640 -->
<xsl:otherwise>
<xsl:attribute name="width">
<xsl:value-of select="@Owidth" />
</xsl:attribute>
<xsl:attribute name="height">
<xsl:value-of select="@Oheight" />
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>

</xsl:otherwise>

</xsl:choose>

<xsl:attribute name="src">
<xsl:value-of select="." />
</xsl:attribute>

</xsl:element>

</xsl:template>

<!-- -->
<!-- document -->
<xsl:template match="document">

<xsl:element name="div">

<xsl:for-each select="*|text()">
<xsl:choose>
<xsl:when test="name(.)='b'">
<xsl:element name="b">
<xsl:value-of select="." />
</xsl:element>
</xsl:when>
<xsl:when test="name(.)='br'">
<xsl:element name="br">
<xsl:value-of select="." />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="." />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>

</xsl:element>

</xsl:template>

</xsl:stylesheet>


...

기존 xml 로 바꾸려는 data 안에 있는 태그들을
xml 용으로 바꾸는데 적응이 안되어있는 문제가 많이 생겼다.
특히, &nbsp; 부분...

급한대로(?) &nbsp; 부분만 ENTITY 로 바꾸기 위해(?)
<!DOCTYPE 을 적용시켰는데... 문제가 거기서 끝이 아니었다.

table 에 attribute 로 남아있는 값에 "" 가 없는 문제가 있었는데, (<a 태그는 script 로 따로 뽑아놓은거니 건너띄더라도...)
아직 방법을 못찾아서 결국, 손으로 일일이 OTL...
('' )... ENTITY 는 그냥저냥 넘어갔지만, 이 부분 해결 못하면 자동화는 물건너가는디...

...

바꾸다보니, xsl 을 그냥(?) <xsl:otherwise ... 에 있는 copy-of 로 처리해도 되겠다...라는 생각이 방금 들었다.
= =;... 그냥 그럴 껄 그랬나...

...

zoom 부분도 잘하면(?) document 안쪽에 넣을 수 있을 것도 같고...

...

NowMark killofki@.

Posted by killofki
,