如果你要使用XML来表示GIF或者JPEG这样的图形格式,那是很费力的。现在如果你使用Scalable Vector Graphics (SVG,可伸缩矢量图形),问题就会简单很多。SVG是一种XML的语言规范,只要使用一点点XSL,就可以自定义创建动态的SVG图像。
这种技术基于创建一个SVG模板,然后修改里面的内容以创建一个新的SVG图像。一开始,你需要一个基本的图像。你可以使用很多工具,比如WebDraw和JASC。其实,你还可以用任何的文本编辑器,因为所有的SVG图像都只是XML。
清单 1展示了一个很简单的SVG按钮,我们将把它作为开始的模板。如果你将它导入到SVG浏览器,你会看到一个简单的蓝色按钮,按钮上的文字为“Button”。如果你点击它,你会链接到Builder.com的主页上。
清单 1: button.svg
<?xml version="1.0"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" _ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <svg width="200" height="50"> <a xlink:href="http://www.builder.com"> <rect x="3" y="6" width="193" height="37" style="fill:rgb(0,0,255);stroke:rgb(0,0,0);stroke-width:1"/> <text x="26px" y="17px" transform="translate(13 12)" style="fill:rgb(0,0,0);font-size:24;font-family:Arial">Button</text> </a> </svg>
我们现在要把这个SVG文档转换成XSL模板。模板把这个图像分成两部分:静态部分是XSL模板,动态部分是XML文档,用于驱动转换。这个图像有两个部分是动态影响的,URL和按钮上的文字。清单 2 展示了动态源数据,它是一个新的XML文件。
清单 2: custombutton.xml
<?xml version="1.0" ?> <button> <text>Google</text> <url>http://www.google.com</url> </button>
就像你看到的一样,这个新按钮的文字会变成“Google”,并且链接到这个著名的搜索引擎。下一步是将SVG图像转换成XSL模板。本质上来说,我们是做个链接,动态改变按钮文字,并且将它们从XML文档中传入。清单 3是这个XSL模板的例子。
清单 3: button.xsl
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink" > <xsl:output method="xml" encoding="ISO-8859-1" indent="yes" /> <xsl:template match="/"> <svg width="200" height="50"> <a> <xsl:attribute name="xlink:href"> <xsl:value-of select="/button/url" /> </xsl:attribute> <rect x="3" y="6" width="193" height="37" style="fill:rgb(0,0,255);stroke:rgb(0,0,0);stroke-width:1"/> <text x="26px" y="17px" transform="translate(13 12)" style="fill:rgb(0,0,0);font-size:24;font-family:Arial"> <xsl:value-of select="/button/text" /> </text> </a> </svg> </xsl:template> </xsl:stylesheet>
XSL模板已经改善了最初的SVG文档,让它变得更为动态化。这只是一个简单的使用单元素模板进行转换的例子。运行时,链接是根据源文件的/button/url元素被激活的,按钮文本的值则来自于/button/text元素。