3.7.4 示例:生成SVG文件
程序清单3-10是一个生成XML输出的典型程序。该程序绘制了一幅现代派绘画,即一组随机的彩色矩形(参见图3-6)。我们使用可伸缩向量图形(Scalable Vector Graphics,SVG)来保存作品。SVG是XML格式的,它使用设备无关的方式描述复杂图形。你可以在http://www.w3c.org/Graphics/SVG找到更多关于SVG的信息。要查看SVG文件,只需使用任意的现在主流的浏览器。
图3-6 生成的现代艺术品
我们并没有涉及SVG的细节。就我们的目的而言,我们只需要知道怎样表示一组彩色的矩形。下面是一个例子:
正如你看到的,每个矩形都被描述成了一个rect节点。它有位置、宽度、高度和填充色等属性,其中填充色以十六进制RGB值表示。
注意:SVG大量使用了属性。实际上,某些属性相当复杂。例如,下面的path元素:
M是指“moveto”命令、L是指“lineto”、z是指“closepath”(!)。显然,该数据格式的设计者不太信任XML表示结构化数据的能力。在你自己的XML格式中,你可能想使用元素来替代复杂的属性。
javax.xml.parsers.DocumentBuilder 1.4
·Document newDocument()
返回一个空文档。
org.w3c.dom.Document 1.4
·Element createElement(String name)
·Element createElementNS(String uri,String qname)
返回具有给定名字的元素。
·Text createTextNode(String data)
返回具有给定数据的文本节点。
org.w3c.dom.Node 1.4
·Node appendChild(Node child)
在该节点的子节点列表中追加一个节点。返回被追加的节点。
org.w3c.dom.Element 1.4
·void setAttribute(String name,String value)
·void setAttributeNS(String uri,String qname,String value)
将有给定名字的属性设置为指定的值。
参数:uri 名字空间的URI或null
qname 限定名。如果有别名前缀,则uri不能为null
value 属性值
javax.xml.transform.TransformerFactory1.4
·static TransformerFactory newInstance()
返回TransformerFactory类的一个实例。
·Transformer newTransformer()
返回Transformer类的一个实例,它实现了标识符转换(不做任何事情的转换)。
javax.xml.transform.Transformer 1.4
·void setOutputProperty(String name,String value)
设置输出属性。标准输出属性参见http://www.w3.org/TR/xslt#output,其中最有用的几个如下所示:
参数:doctype-public DOCTYPE声明中使用的公共ID
doctype-system DOCTYPE声明中使用的系统ID
Indent “yes”或者“no”
method “xml”、“html”、“text”或定制的字符串
·void transform(Source from,Result to)
转换一个XML文档。
javax.xml.transform.dom.DOMSource 1.4
·DOMSource(Node n)
从给定的节点中构建一个源。通常,n是文档节点。
javax.xml.transform.stream.StreamResult 1.4
·StreamResult(File f)
·StreamResult(OutputStream out)
·StreamResult(Writer out)
·StreamResult(String systemID)
从文件、流、写出器或系统ID(通常是相对或绝对URL)中构建流结果。