这个岗位在XML文件和XSLT 1.0 stylesheets谈论namespaces。 特别是,它展示一定数量的技术控制在outputted文件的namespace前缀和声明。
|
|
||
|
这个岗位在XML文件和XSLT 1.0 stylesheets谈论namespaces。 特别是,它展示一定数量的技术控制在outputted文件的namespace前缀和声明。 我在stylesheet最近回答了对一个普遍的程序员论坛的一个问题关于怎样存放和访问用户定义的可变物虽则然后使那些可变物成环。 我意识到许多开发商不熟悉做此的可利用的技术和决定增加在我的博克的一个词条关于这个题目。 在stylesheets之内的用户定义的可变物列阵不作为XSLT规格的部分。 通常方式处理在XSLT 1.0 stylesheets的这个问题将定义属于非无效的namespace是与XSLT namspace不同的一个用户定义的上层元素。 这些用户定义的上层元素典型地被用于存放错误信息、查寻数据等等。 您能然后访问这些用户定义的元素从您的stylesheet的内部通过对待stylesheet作为一个另外的源文件和装载它使用本文()作用用一个空字符串作为第一个论据。 一个空字符串被解释意味当前stylesheet。 以下stylesheet展示这个方法。 <xsl :stylesheet xmlns :xsl= " http://www.w3.org/1999/XSL/Transform " version= " 1.0 " xmlns :foo= " http://foo.com " exclude-result-prefixes= " foo " > <xsl :产品method= "文本" encoding= " utf-8 "/> <foo :vars> <foo :var name= " z1 " >A</foo :var> <foo :var name= " z2 " >B</foo :var> <foo :var name= " z3 " >C</foo :var> <foo :var name= " z4 " >D</foo :var> </foo :vars> <xsl :模板match= "/“> <xsl :为每select= "文件(")/xsl :stylesheet/foo :vars/foo :var " > <xsl :值select= "。“/> <xsl :如果test= "位置()! =前() “> <xsl :text>, </xsl :text> </xsl :if> </xsl :for-each> <xsl :text> </xsl :text> </xsl :template> </xsl :stylesheet> 如果您使用XSLT 2.0,这个方法不再必要,因为更加简单和更加典雅的方法供给我们。 例如,使用<xsl,您能存放和直接地访问可变物:如以下stylesheet所显示的variable>元素。 <xsl :stylesheet xmlns :xsl= " http://www.w3.org/1999/XSL/Transform " version= " 2.0 " > <xsl :产品method= "文本" encoding= " utf-8 "/> <xsl :易变的name= " z1 " select= " ‘A’ “/> <xsl :易变的name= " z2” select=” ‘B’”/> <xsl :易变的name= " z3 " select= " ‘C’ “/> <xsl :易变的name= " z4” select=” ‘D’”/> <xsl :易变的name= " vars " select= " $z1, $z2, $z3, $z4 "/> <xsl :模板match= "/“> <xsl :为每select= " $vars” > <xsl :值select=””。 /> <xsl :如果test= "位置()! =前() “> <xsl :text>, </xsl :text> </xsl :if> </xsl :for-each> <xsl :text> </xsl :text> </xsl :template> </xsl :stylesheet> 另一个方式存放和访问这数据在XSLT 2.0 stylesheet将使用一个全局变量定义如下所示。 <xsl :stylesheet xmlns :xsl= " http://www.w3.org/1999/XSL/Transform " version= " 2.0 " > <xsl :产品method= "文本" encoding= " utf-8 "/> <xsl :易变的name= " vars " > <var name= " z1 " >A</var> <var name= " z2 " >B</var> <var name= " z3 " >C</var> <var name= " z4 " >D</var> </xsl :variable> <xsl :模板match= "/“> <xsl :为每select= " $vars/var” > <xsl :值select=””。 /> <xsl :如果test= "位置()! =前() “> <xsl :text>, </xsl :text> </xsl :if> </xsl :for-each> <xsl :text> </xsl :text> </xsl :template> </xsl :stylesheet> 全部三stylesheets输出了同样数据。 您也许对这个图象感到奇怪。 它是从我的膝上型计算机屏幕。 我为XSLT 1.0变革使用了在微软景色SUA和撒克逊人9的xsltproc在微软Powershell v2.0 CTP2中为二XSLT 2.0变革。 注意, 被提出我关心如何复制XML文件整个内容有某些例外的一个最近问题。 结果单一方式处理在XSLT1.0的这个要求将包括标准XSL身分模板在我的stylesheet和增加另一块模板处理例外。 一个简单例子将做事清除器。 假设我们有我无耻地复制从W3Schools.com和修改简化)的以下XML文件(并且我们想要复制本文全部除了CDs细节由一位具体艺术家。 < ?xml version= " 1.0 " ?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide您的heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <YEAR>1988</YEAR> </CD> <CD> <TITLE>Greatest <ARTIST>Dolly Hits</TITLE> Parton</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>RCA</COMPANY> <YEAR>1982</YEAR> </CD> <CD> <TITLE>One夜only</TITLE> <ARTIST>Bee Gees</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Polydor</COMPANY> <YEAR>1998</YEAR> </CD> <CD> <TITLE>Sylvias Mother</TITLE> <ARTIST>Dr.Hook</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS</COMPANY> <YEAR>1973</YEAR> </CD> <CD> <TITLE>Maggie May</TITLE> <ARTIST> Rod Stewart </ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Pickwick</COMPANY> <YEAR>1990</YEAR> </CD> </CATALOG> 下面stylesheet。 它接受一个参量,即名字或者一部分的名字的艺术家。 它复制所有结和属性对除了那些结的产品文件和属性与命名比赛或is is输入的串的超集的艺术家有关。 < ?xml version= " 1.0 " ?> <xsl :stylesheet xmlns :xsl= " http://www.w3.org/1999/XSL/Transform " version= " 1.0 " > <xsl :氰胍name= "艺术家" ></xsl :param> <xsl :产品method= " xml "/> <xsl :模板match= "结() | @* " > <xsl :copy> <xsl :申请模板select= " @* | 结() “/> </xsl :copy> </xsl :template> <xsl :模板match=” /CATALOG/CD " > <xsl :如果test= "没有(包含(。/ARTIST, $artist))“> <xsl :拷贝select=””。 /> </xsl :if> </xsl :template> </xsl :stylesheet> 第一块模板是从XSL 1.0变革推荐的标准身分模板。 它匹配所有的属性和是所有的结其他结的孩子,并且复制他们对产品文件。 第二块模板取消自动复制<CD>结和孩子,检查看名字或者一部分的名字的艺术家不匹配搜索字符串和只做结和属性的一个多层次拷贝对产品文件,如果没有比赛。 假设您在Linux系统,您能使用命令行(是XSLT C程序库的一部分地精的)的公共xsltproc变换件成以下产品文件,当"Stewart"通过作为参量对stylesheet时。 BTW,注意使用Java样式参数串的串行情。 $ xsltproc -氰胍艺术家“‘Stewart'" file.xsl file.xml 这产品文件。 它是件的拷贝,除了“纪录”的 使用EXSLT广义函数,这个岗位在XSLT 1.0和XSLT 2.0谈论动态XPath表示评估的问题和如何处理它。 支持formating在XSLT 1.0规格的日期和时间是不存在的。 这没有意味使用XSLT 1.0,人不可能格式化日期和时间串; 它使更难如此做并且增加许多额外代码行到stylesheets。 然而它是大家开发stylesheets导致必须做的事。 在这个岗位我在XSLT 2.0和XPath 2.0显示您几个方式格式化在XSLT 1.0的日期和谈论某些新的日期-时间的formating和操作作用。 |
||
|
复制权© 2005-2011 Finnbarr P.墨菲。 版权所有。 |
||