test1.xml:
<?xml version="1.0" encoding="utf-8"?> <?xml:stylesheet type="text/xsl" href="test3.xsl"?> <root> <e1> <e1-1> <e1-1-1> 1231.23 </e1-1-1> </e1-1> <e1-2> 4564.56 </e1-2> </e1> <e2> <e2-1> 789.789 </e2-1> <e2-2> <e2-2-1> 0120.12 </e2-2-1> </e2-2> <e2-3> 3453.45 </e2-3> </e2> <e3> <e3-1> <e3-1-1> 6.78678 </e3-1-1> <e3-1-2> <e3-1-2-1> 9019.01 </e3-1-2-1> </e3-1-2> </e3-1> <e3-2> <e3-2-1> 234.234 </e3-2-1> </e3-2> </e3> </root> |
test1.xsl:
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <html><body> <xsl:apply-templates select="root/e2"/> </body></html> </xsl:template> <xsl:template name="temp1" match="root/e2"> [preceding::root/e2/] <xsl:for-each select="preceding::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [following::root/e2/] <xsl:for-each select="following::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [preceding-sibling::root/e2/] <xsl:for-each select="preceding-sibling::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [following-sibling::root/e2/] <xsl:for-each select="following-sibling::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [descendant::root/e2/] <xsl:for-each select="descendant::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [ancestor::root/e2/] <xsl:for-each select="ancestor::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [descendant-or-self::root/e2/] <xsl:for-each select="descendant-or-self::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [ancestor-or-self:root/e2/] <xsl:for-each select="ancestor-or-self::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [parent::root/e2/] <xsl:for-each select="parent::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [child::root/e2/] <xsl:for-each select="child::node()"> [<xsl:value-of select="local-name()"/>] </xsl:for-each> <hr/> [self::root/e2/] [<xsl:value-of select="local-name(self::node())"/>] <hr/> </xsl:template> </xsl:stylesheet> |
结果:下图中的[]代表textNode()。因为node()方法包含所有类型的节点。因此使用该方法时应该留意对类型进行过滤。
[preceding::root/e2/] [xml:stylesheet] [e1] [e1-1] [e1-1-1] [] [e1-2] [] [following::root/e2/] [e3] [e3-1] [e3-1-1] [] [e3-1-2] [e3-1-2-1] [] [e3-2] [e3-2-1] [] [preceding-sibling::root/e2/] [e1] [following-sibling::root/e2/] [e3] [descendant::root/e2/] [e2-1] [] [e2-2] [e2-2-1] [] [e2-3] [] [ancestor::root/e2/] [] [root] [descendant-or-self::root/e2/] [e2] [e2-1] [] [e2-2] [e2-2-1] [] [e2-3] [] [ancestor-or-self:root/e2/] [] [root] [e2] [parent::root/e2/] [root] [child::root/e2/] [e2-1] [e2-2] [e2-3] [self::root/e2/] [e2]
|
test2.xsl:
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <html><body> <xsl:apply-templates select="root/e2"/> </body></html> </xsl:template> <xsl:template match="root/e2"> [root/e2/e2-1][ceiling( <xsl:value-of select="child::node()[local-name()='e2-1']"/> )=<xsl:value-of select="ceiling(child::node()[local-name()='e2-1'])"/>] <hr/> [root/e2/e2-2/e2-2-1][floor( <xsl:value-of select="descendant::node()[local-name()='e2-2-1']"/> )=<xsl:value-of select="floor(descendant::node()[local-name()='e2-2-1'])"/>] <hr/> [root/e1/e1-1-1 + root/e3/e3-1-1][ <xsl:value-of select="preceding::node()[local-name()='e1-1-1']"/> + <xsl:value-of select="following::node()[local-name()='e3-1-1']"/> = <xsl:value-of select="preceding::node()[local-name()='e1-1-1'] + following::node()[local-name()='e3-1-1']"/>] <hr/> [root/e2/e2-2/e2-2-1][round( <xsl:value-of select="descendant::node()[local-name()='e2-2-1']"/> )= <xsl:value-of select="round(descendant::node()[local-name()='e2-2-1'])"/>] <hr/> [root/e2 counts of descendants] [count(nodes)= <xsl:value-of select="count(descendant::node())"/>] [count(elements)= <xsl:value-of select="count(descendant::node()[boolean(local-name())])"/>] [count(texts)= <xsl:value-of select="count(descendant::node()[boolean(text())])"/>] <hr/> [root/e2][number(text())= <xsl:value-of select="number(self::node()/text())"/>] [number(boolean(text()))= <xsl:value-of select="number(boolean(self::node()/text()))"/>] [number(string(text()))= <xsl:value-of select="number(string(self::node()/text()))"/>] <hr/> </xsl:template>
</xsl:stylesheet> |
结果:这一部分测试xPath中数值函数的运用,几点结论:
一、当任意类型之间用+相加时,相加之前元素会先转换为number类型。
二、形如0120.12这样以零开头的字串,转换成number型时不会报错。
三、可以用boolean(local-name())和boolean(text())的方式过滤节点类型。
四、对于不含textNode的元素或父元素,number()并不将其转换为0,而是转换为NaN。对于这些节点,可以用number(boolean(text())的方式转换为。
[root/e2/e2-1][ceiling( 789.789 )=790] [root/e2/e2-2/e2-2-1][floor( 0120.12 )=120] [root/e1/e1-1-1 + root/e3/e3-1-1][ 1231.23 + 6.78678 = 1238.01678] [root/e2/e2-2/e2-2-1][round( 0120.12 )= 120] [root/e2 counts of descendants] [count(nodes)= 7] [count(elements)= 4] [count(texts)= 3] [root/e2][number(text())= NaN] [number(boolean(text()))= 0] [number(string(text()))= NaN]
|
test3.xsl:
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <html><body> <xsl:apply-templates select="root/e2"/> </body></html> </xsl:template> <xsl:template match="root/e2">
[root/e2][starts-with( <xsl:value-of select="descendant::node()[local-name()='e2-2-1']"/> ,'01')= <xsl:value-of select="starts-with(descendant::node()[local-name()='e2-2-1'],'01')"/>] [root/e2][starts-with(normalize-space( <xsl:value-of select="descendant::node()[local-name()='e2-2-1']"/>) ,'01')= <xsl:value-of select="starts-with(normalize-space(descendant::node()[local-name()='e2-2-1']),'01')"/>] [starts-with(number( <xsl:value-of select="descendant::node()[local-name()='e2-2-1']"/>) ,'1')= <xsl:value-of select="starts-with(number(descendant::node()[local-name()='e2-2-1']),'1')"/>]
<hr/> [root/e2][starts-with( 0120.12,01)= <xsl:value-of select="starts-with(0120.12, 01)"/>] [starts-with( '0120.12','01')= <xsl:value-of select="starts-with('0120.12', '01')"/>] [starts-with( 0120.12,1)= <xsl:value-of select="starts-with(0120.12, 1)"/>] [starts-with( 0120.12,00001)= <xsl:value-of select="starts-with(0120.12, 00001)"/>] <hr/> [starts-with(string( <xsl:value-of select="child::node()[local-name()='e2-3']"/>),'345')= <xsl:value-of select="starts-with(string(child::node()[local-name()='e2-3']), '345')"/>] [starts-with(number( <xsl:value-of select="child::node()[local-name()='e2-3']"/>),'345')= <xsl:value-of select="starts-with(number(child::node()[local-name()='e2-3']), '345')"/>] [starts-with( <xsl:value-of select="local-name()"/>,'e')= <xsl:value-of select="starts-with(local-name(), e)"/>] <hr/>
</xsl:template> </xsl:stylesheet>
|
结果:这一部分测试字串函数,几点结论:
一、在使用字串函数时,如果参数是节点或节点集,要小心地处理空白,否则会产生令你嗔目结舌的结果。很多人习惯在XML文件的编辑软件如UE等中设定将Tab转换为空白,应记得先调用normalize-space()函数去掉不需要的空白。
二、但字串函数的参数不是节点或节点集而需要类型转换时,XSL是依照boolean->number->string的次序进行转换的。
所以对于下图中的0120.12实际上先被转换成120.12,然后被转换成'120.12',00001先转换成1,然后被转换成'1'。
三、substring()以1为头一个字符的索引值。
四、translate()函数提供了一种高效、便捷地替换字符的方法,为了达到预定效果,应确保该函数的第二个和第三个参数的字符长度总是相等,因为长度不一时,较长参数的多余字符将被自动截掉。
[root/e2][starts-with( 0120.12 ,'01')= false] [root/e2][starts-with(normalize-space( 0120.12 ) ,'01')= true] [starts-with(number( 0120.12 ) ,'1')= true]
[root/e2][starts-with( 0120.12,01)= true] [starts-with( 0120.12,'01')= false] [starts-with( 0120.12,1)= true] [starts-with( 0120.12,00001)= true]
[starts-with(string( 3453.45 ),'345')= false] [starts-with(number( 3453.45 ),'345')= true] [starts-with( e2,'e')= true]
[string-length( 789.789 )= 29] [string-length(normalize-space( 789.789 ))= 7] [contains( 789.789 , 789)= true] [substring('substring',3,4)= bstr] [substring(123456, 2,10)= 23456] [substring(123456, -2,4)= 1] [substring(123456, 5,-2)= ] [substring-after('12-34-56', '-')= 34-56] [substring-after('12-34-56', '')= 12-34-56] [substring-before('12-34-56', '-')= 12] [substring-before('12-34-56', '')= ] [translate('12a34b56c', 'abc', 'xyz')= 12x34y56z] [translate('12a34b56c', 'abcdefg', 'xyz')= 12x34y56z] [translate('12a34b56c', 'abc', 'xyzlmn')= 12x34y56z] [translate('12a34b56c78a90b12c', 'abc', 'xyz')= 12x34y56z78x90y12z]
|
分享到:
相关推荐
6. **样式表结构**:探讨如何组织XSL样式表,包括导入和包含其他样式表的机制。 7. **转换过程**:阐述XML到HTML、SVG或其他格式的转换流程,以及如何控制输出结果的样式和布局。 8. **实际应用**:通过实例演示...
主要实现了基于XML的同学录,根据XML文档,用DTD检验及保证其有效性,使其结构完整良好,编写xsl文档,使其按照规定的样表显示,并运用XPath、Xlink、Xpointer等实现向HTML的转换,最后显示在浏览器上。直观,简单,...
这些规则通常包含在XSL样式表中,其中可以包含元素选择器、模式匹配和转换指令。XSLT不仅处理XML的结构,还可以处理文本、图像、HTML等,使得XML数据能够以用户友好的方式展现。 **XSLT与JavaScript的交互** 在...
XSL是一种用于转换XML(Extensible Markup Language)文档的样式表语言。它允许开发者将XML数据转换成其他格式,如HTML、PDF或者纯文本,以便于在不同的环境中呈现或处理。XSL由三部分组成:XSL Transformations ...
XSL元素是XSL样式表的基本构建块,它们定义了如何转换XML文档。常见的XSL元素包括模板(`<xsl:template>`),用于定义如何处理XML节点;选择器(`<xsl:apply-templates>`),用于应用模板到XML文档的特定部分;变量...
总结来说,XML学习文档覆盖了从XML的基础到进阶的解析方式、文档验证、样式表转换以及路径导航等多个方面。理解并掌握这些知识点,对于深入理解和使用XML,以及进行数据处理和交换具有重要意义。
这里,`xmlData`和`xslData`分别代表XML文档和XSL样式表的字符串表示,`contactType`参数被设置为"friend",这将在XSL模板中用于筛选出朋友类型的联系人。 `contactsextra.xml`可能是我们的XML数据源,包含联系人...
在XSL(Extensible Stylesheet Language,可扩展样式表语言)中,XPath被广泛用于数据转换,因为它能方便地选取XML数据并对其进行操作。 XPath的基本概念包括节点、轴、节点测试和谓语。节点是XML文档的构成元素,...
学习XSL不仅包括理解基本概念,还需要掌握如变量、函数、模板选择、流控制(如条件语句和循环)、以及如何导入和链接其他XSL样式表等高级特性。此外,熟悉XPath的语法和功能对于有效使用XSL至关重要,因为XPath是...
XSLT(XSL Transformations)是一种样式表语言,用于转换XML文档。在XSLT中,XPath主要作为选取源XML文档中特定部分的工具。XSLT模板的匹配规则和表达式都依赖于XPath。此外,XQuery和XPointer也是基于XPath表达式的...
本话题将深入探讨如何根据需求自定义DocBook的XSL样式表。 首先,我们要理解XSL的作用。XSL是XML的一个子集,用于转换XML文档的结构,通过模板匹配和规则定义,实现XML到HTML、PDF或其他格式的转换。在DocBook中,...
通过调用`TransformerFactory.newInstance()`创建一个工厂,然后使用`newTransformer()`方法加载XSL样式表。接着,`transform()`方法执行实际的转换操作,输入源和结果目标分别由`StreamSource`和`StreamResult`表示...
4. **xsl**:这个文件名可能表示一个XSL样式表文件,其中包含了实际的XSL代码。读者可以分析这个示例文件来学习如何在实际场景中应用XSL进行数据转换。 综合这些资源,学习者可以系统地了解和掌握XSL,从基础概念到...
XSL(Extensible Stylesheet Language,可扩展样式表语言)是一种用于控制 XML 数据呈现方式的标准语言。类似于 CSS 对于 HTML 的作用,XSL 使得 XML 数据能够按照预定义的格式进行展现。 #### 二、XSL 的组成部分 ...
XSL(Extensible Stylesheet Language)是一种样式表语言,用于转换XML文档的结构和格式,使其更适合人类阅读或机器处理。XSL分为三个主要部分:XSLT(XSL Transformations)、XPath(XML Path Language)和XSL-FO...
XSLT标准API是开发者与XSLT引擎交互的接口,它允许程序动态地创建、修改和执行XSLT样式表。手册可能涵盖了XPath(XML路径语言)、XSLT函数库、DOM(Document Object Model)操作等内容。通过深入学习,你可以了解...
通过本课程的学习,使学生掌握XML应用基础知识,具备使用XML开发Web站点必备的基础知识、在XML中如何使用DTD,XML Schema知识、XML样式表、使用CSS格式格式化XML,XSL样式表,名称空间、XML DOM与XPath,以及XML的...
2. **XSL样式表结构**:一个XSL样式表由模板组成,这些模板定义了如何处理XML文档中的元素。模板使用XPath(XML Path Language)来定位XML数据,并使用XSL指令来决定输出的形式。 3. **Excel格式化**:在XSLT中,...
- **XSL样式表(XSLT Stylesheets)**:定义了转换规则,描述如何将XML文档转换为其他形式。 - **XPath**:XML Path Language,XSLT中的路径表达式语言,用于在XML文档中查找和选取节点。 2. **XSLT的处理模型** ...
它的主要目标是样式表(XSL样式表),它定义了如何将输入XML转换为输出。XSLT样式表由模板规则组成,这些规则匹配XML文档中的特定部分,并定义了如何处理这些匹配的部分。例如,一个模板可能规定遇到某个元素时,将...