1 °³¿ä
- Extensible Stylesheet Language for Transformation
- XMLÀ» ´Ù¸¥ Æ÷¸Ë(´Ù¸¥ XMLµµ Æ÷ÇÔ)À¸·Î º¯È¯ÇÏ´Â µ¥ »ç¿ëµÇ´Â ÆÄÀÏ Çü½Ä(¾ð¾î?)ÀÌ´Ù.
- ³»ºÎÀûÀ¸·Î XSL, XPath, XSL-FO¸¦ »ç¿ëÇÑ´Ù.
2 XMLÀ» HTML·Î º¯È¯Çϱâ
¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº XML ÆÄÀÏÀÌ ÀÖ´Ù°í ÇÏÀÚ.
iteminfo.xml
<?xml version="1.0" encoding="Windows-1252"?>
<ItemInfos>
<MACE>
<Item>
<Type>1</Type>
<Name>Light Club</Name>
<Price>1</Price>
<RequiredLevel>1</RequiredLevel>
<RequiredJob>KT_PANZER_NEWBIE,KT_PANZER,KT_HIGHER_PANZER,KT_DARK_PANZER</RequiredJob>
<Slot></Slot>
<Traits>
<Element ItemTrait="MIN_DAMAGE" Amount="2"/>
<Element ItemTrait="MAX_DAMAGE" Amount="5"/>
<Element ItemTrait="TOHIT" Amount="4"/>
<Element ItemTrait="MIN_RANGE" Amount="20"/>
<Element ItemTrait="CRITICAL" Amount="5"/>
</Traits>
<MaxStack>1</MaxStack>
</Item>
...
<MACE>
<SWORD>
...
</SWORD>
...
ÀÌ ÆÄÀÏ¿¡¼ MACE ³ëµå ¾È¿¡ ÀÖ´Â ³»¿ëµéÀ» Å×À̺í Çü½ÄÀ¸·Î ¿¹»Ú°Ô º¸°í ½Í´Ù°í ÇÏÀÚ. ±×·¯±â À§Çؼ´Â ¸ÕÀú XSLT ÆÄÀÏÀ» ÀÛ¼ºÇؾßÇÑ´Ù.
transform.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/ItemInfos">
<HTML>
<HEAD>
<TITLE>ItemInfo</TITLE>
</HEAD>
<BODY>
<H1>MACE</H1>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<th>Type</th>
<th>Name</th>
<th>Price</th>
<th>Required Level</th>
<th>Required Job</th>
<th>Slot</th>
<th>Traits</th>
<th>Max Stack</th>
</tr>
<xsl:for-each select="MACE/Item">
<tr>
<td><xsl:value-of select="Type"/></td>
<td><xsl:value-of select="Name"/></td>
<td><xsl:value-of select="Price"/></td>
<td><xsl:value-of select="RequiredLevel"/></td>
<td><xsl:value-of select="RequiredJob"/></td>
<td><xsl:value-of select="Slot"/></td>
<td>
<table border="0" cellpadding="0" cellspacing="0">
<xsl:for-each select="Traits/Element">
<tr>
<td><xsl:value-of select="@ItemTrait"/></td>
<td><xsl:value-of select="@Amount"/></td>
</tr>
</xsl:for-each>
</table>
</td>
<td><xsl:value-of select="MaxStack"/></td>
</tr>
</xsl:for-each>
</table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
XSLT ¿£Áø¿¡´Â ¿©·¯ °¡Áö°¡ ÀÖÀ¸³ª, ÀÏ´Ü ¿©±â¼´Â ÆÄÀ̽㠱â¹ÝÀÇ
4suite ÆÐŰÁö¸¦ ÀÌ¿ëÇÑ´Ù. 4suite ³»ºÎÀÇ ¸ðµâÀ» ÀÌ¿ëÇϱâ À§Çؼ´Â ÆÄÀ̽㠼ҽº¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.
generate_html.py
from Ft.Xml.Xslt import Processor
from Ft.Xml import InputSource
from Ft.Lib import Uri
def transform(xml_name, xsl_name):
xml_uri = Uri.OsPathToUri(xml_name)
xsl_uri = Uri.OsPathToUri(xsl_name)
prc = Processor.Processor()
prc.appendStylesheet(InputSource.DefaultFactory.fromUri(xsl_uri))
return prc.run(InputSource.DefaultFactory.fromUri(xml_uri))
if __name__ == '__main__':
f = file("generated.html", "w")
f.write(transform('iteminfo.xml', 'transform.xsl'))
f.close()
½ÇÇàÇÏ¸é ¾Æ·¡¿Í °°Àº HTML ÆÄÀÏÀÌ Ãâ·ÂµÈ´Ù.
generated.html
<HTML>
<HEAD>
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<TITLE>ItemInfo</TITLE>
</HEAD>
<BODY>
<H1>MACE</H1>
<table cellpadding="0" cellspacing="0" border="1">
<tr>
<th>Type</th>
<th>Name</th>
<th>Price</th>
<th>Required Level</th>
<th>Required Job</th>
<th>Slot</th>
<th>Traits</th>
<th>Max Stack</th>
</tr>
<tr>
<td>1</td>
<td>Light Club</td>
<td>1</td>
<td>1</td>
<td>KT_PANZER_NEWBIE,KT_PANZER,KT_HIGHER_PANZER,KT_DARK_PANZER</td>
<td></td>
<td>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>MIN_DAMAGE</td>
<td>2</td>
</tr>
<tr>
<td>MAX_DAMAGE</td>
<td>5</td>
</tr>
<tr>
<td>TOHIT</td>
<td>4</td>
</tr>
<tr>
<td>MIN_RANGE</td>
<td>20</td>
</tr>
<tr>
<td>CRITICAL</td>
<td>5</td>
</tr>
</table>
</td>
<td>1</td>
</tr>
...
</table>
</BODY>
</HTML>
4suite¿¡¼ ÇѱÛÀ» ¾î¶»°Ô ó¸®ÇÒ ¼ö ÀÖ´ÂÁö¸¦ ¸ð¸£°Ú´Ù. XML ÆÄÀÏ ÀÚü¸¦ À¯´ÏÄÚµå ±â¹ÝÀ¸·Î ÀúÀåÇÏ¸é µÇ°ÚÀ¸³ª, ±×·¸Áö ¾ÊÀº »óȲ¿¡¼´Â µµ´ëü ¾î¶»°Ô ÇØ¾ßÇÏ´Â °ÇÁö...
3 ¸µÅ©
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)