XML中重复字段替换

2010年07月27日  |  9:01 下午分类:XML, 未分类  |  167 views
作为JAVA程序员,XML给我们带来的方便,大家都深有体会。我们经常会遇到这样的情况,把一个项目中需要变化的部分放在XML配置文件里(比如数据库中的用户名,密码,ip地址等信息),这样在我们部署或迁移项目时,只需要修改一下配置文件,重启一下Tomcat便可以了,无需重新编译类,充分体现了java作为跨平台解决方案的优越性。


但是如果XML文件中出现了大量重复性的东西怎么办?比如像下面的XSL文件,由于某种原因,我必须要给每个超链接补全服务器的地址http://localhost:8080/slw/show.jsp?webUrl=,如下图:

?Download DOWNLOAD.XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:template match="/">
		<div class="wrap">
		<table>
		<tr>
		<xsl:for-each select="result/page/t">
		<td>
			<xsl:element name="a">
				<xsl:attribute name="href">
				http://localhost:8080/slw/show.jsp?webUrl=<xsl:value-of select="./@href"/>
				</xsl:attribute>
				<xsl:value-of select="."/>
			</xsl:element>
		</td>
	   </xsl:for-each>
				</tr>
		</table>
		............................................................................
		</div>
</xsl:stylesheet>


像这样的xsl文件,在我的项目中可能有10几个,而且每个文件中都有5、6处ip地址。一旦更换服务器,我就悲剧了,大量重复性的体力劳动,是每个程序员的悲哀。还好,DTD可以有效的解决这个问题。


DTD和Schema一样,以一种保证缩写XML文件正确的验证机制,不太了解的同学可以到网上搜索一下。DTD中的Entity实体可以有效解决上述问题。
ENTITY 语句用于在DTD 中定义实体,供与DTD 关联的XML 文档以及DTD 本身使用。ENTITY 提供缩写的条目,以便放入XML 文档。


具体解决方法如下:
首先我们定义一个外部的DTD文件constant.dtd:

?Download constant.dtd
1
2
	<?xml version="1.0" encoding="UTF-8"?>
	<!ENTITY HREFURL "http://localhost:8080/qdcc/show.jsp?webUrl=">

然后在所需要使用的xml文件头部引入即可:

?Download constant.dtd
1
<!DOCTYPE result SYSTEM "constant.dtd">

上述完整例子如下:(注意XML文件中引入变量时,写法如下:&变量名;)

?Download constant.dtd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE result SYSTEM "constant.dtd">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:template match="/">
		<div class="wrap">
		<table>
		<tr>
		<xsl:for-each select="result/page/t">
		<td>
			<xsl:element name="a">
				<xsl:attribute name="href">
				http://localhost:8080/slw/show.jsp?webUrl=<xsl:value-of select="./@href"/>
				</xsl:attribute>
				<xsl:value-of select="."/>
			</xsl:element>
		</td>
	   </xsl:for-each>
				</tr>
		</table>
		............................................................................
		</div>
</xsl:stylesheet>
喜欢本文,那就收藏到: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
  • No Related Post

发表您的评论