XML中重复字段替换
作为JAVA程序员,XML给我们带来的方便,大家都深有体会。我们经常会遇到这样的情况,把一个项目中需要变化的部分放在XML配置文件里(比如数据库中的用户名,密码,ip地址等信息),这样在我们部署或迁移项目时,只需要修改一下配置文件,重启一下Tomcat便可以了,无需重新编译类,充分体现了java作为跨平台解决方案的优越性。
但是如果XML文件中出现了大量重复性的东西怎么办?比如像下面的XSL文件,由于某种原因,我必须要给每个超链接补全服务器的地址http://localhost:8080/slw/show.jsp?webUrl=,如下图:
但是如果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> |


















