XML - 管理数据交换/C.3
在上一章中,创建了一个样式表,它只是将 XML 文档中的文本输出到 HTML 页面。可以使用表格格式化文档的显示,以布局内容以供显示。此外,可以使用 HTML 中的 style 标签定义不同的背景颜色、字体大小、字体粗细和对齐方式,以设计输出页面。表 3-3 显示了提到的功能。注意,HTML 命令为大写。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/> <xsl:template match="/"> <HTML> <HEAD> <TITLE>Tour Guide</TITLE> <--The style tag can be used to define different colors, font size, font family, text alignment, margins, and many other style-formatting elements just like a HTML page.--> <STYLE TYPE="text/css"> H2 {TEXT-ALIGN:CENTER;} .greenBackground {BGCOLOR=“LIGHTGREEN; TEXT-ALIGN:CENTER;} .yellowBackground {BGCOLOR=“YELLOW; TEXT-ALIGN:CENTER; FONT-WEIGHT: BOLD ; FONT-SIZE:14pt;} .salmonBackground {BGCOLOR=“LIGHTSALMON; TEXT-ALIGN:CENTER; FONT-SIZE:12pt;} </STYLE> </HEAD> <BODY> <H2>Cities and Hotels</H2> <--The template defined is called to display in a HTML page by the xsl:apply-templates element--> <xsl:apply-templates select="tourGuide"/> </BODY> </HTML> </xsl:template> <xsl:template match="tourGuide"> <TABLE BORDER="1" WIDTH="100%"> <--There is a xsl:for-each element, hotel, nested inside the xsl:for-each city element. (Display the appropriate contents for the hotel elements for every hotel inside every city).--> <xsl:for-each select="city"> <TR> <TD COLSPAN="6" CLASS="greenBackground"> <BR/> <xsl:text>Continent: </xsl:text> <xsl:value-of select="continent"/> <BR/> <xsl:text>Country: </xsl:text> <xsl:value-of select="country"/> <BR/> <xsl:text>Administration Unit: </xsl:text> <xsl:value-of select="adminUnit"/> <BR/> <xsl:text>City: </xsl:text> <xsl:value-of select="cityName"/> <BR/> <BR/> </TD> </TR> <TR CLASS="yellowBackground"> <TD/> <TD> <xsl:text>Hotel Name</xsl:text> </TD> <TD> <xsl:text>Street Address</xsl:text> </TD> <TD> <xsl:text>Telephone Number</xsl:text> </TD> <TD> <xsl:text>Email Address</xsl:text> </TD> <TD> <xsl:text>Hotel Rating</xsl:text> </TD> </TR> <xsl:for-each select="hotel"> <TR CLASS="salmonBackground"> <TD STYLEFONT-SIZE:8pt"> <--An image tag is used to display an image--> <--Just like the src, the attributes width, height, and alt can be called to format the image.--> <IMG> <xsl:attribute name="SRC"> <--The file name and location is defined as an attribute (filename) of the empty tag, hotelPicture, in the XML schema. To indicate that filename is the data source, the src attribute of the image tag must be called--> <xsl:value-of select="hotelPicture/@filename"/> </xsl:attribute> <xsl:attribute name="WIDTH"> <xsl:value-of select="hotelPicture/@size"/> </xsl:attribute> <xsl:attribute name="HEIGHT"> <xsl:value-of select="hotelPicture/@size"/> </xsl:attribute> <xsl:attribute name="ALT"> <xsl:value-of select="hotelPicture/@value"/> </xsl:attribute> </IMG> <BR/> <xsl:value-of select="hotelPicture/@imageURL"/> </TD> <TD> <xsl:value-of select="hotelName"/> </TD> <TD> <xsl:value-of select="streetAddress"/> </TD> <TD> <xsl:value-of select="telephoneNumber"/> </TD> <TD> <xsl:value-of select="emailAddress"/> </TD> <TD> <xsl:value-of select="hotelRating"/> </TD> </TR> </xsl:for-each> <TR CLASS="salmonBackground"> <TD COLSPAN="6" TEXT-ALIGN:RIGHT"> <H3> <xsl:text>Number of hotel(s) found: </xsl:text> <--<xsl:value-of select="count(hotel)"/>, count() is a built-in function that counts the number of node indicated by the parameter, in this case the number of hotels. This means that the total number of hotels for each city is reported.--> <xsl:value-of select="count(hotel)"/> </H3> </TD> </TR> </xsl:for-each> </TABLE> </xsl:template> </xsl:stylesheet>
注意:注释标签格式不正确。为了让它们显示在屏幕上,需要进行一些细微的调整。您需要添加 ! 以确保您可以验证您的样式表。
示例:<!-- 这是一个名为自定义简单类型,从 Hotel 调用,当有人输入电子邮件地址时 -->
表 3-3:用于一对多关系的 XML 样式表
可以使用 XML 样式表使用 HTML 表格格式化输出,以进行布局。 |
参考第 2 章 - 使用 Netbeans 创建上述 XML 样式表的步骤的单个实体。
使用 city_hotel.xml 验证 city_hotel.xsd 的上述样式表 (city_hotel.xsl) 的输出结果:链接到 city_hotel.html
可以使用特殊的正则表达式 (regex) 语言来构造模式。XML Schema 中的正则表达式语言基于 Perl 的正则表达式语言。以下是常见的一些符号
. (句号) | 表示任何字符 |
\d | 表示任何数字 |
\D | 表示任何非数字 |
\w | 表示任何单词(字母数字)字符 |
\W | 表示任何非单词字符(例如 -, +, =) |
\s | 表示任何空格(包括空格、制表符、换行符和回车符) |
\S | 表示任何非空格字符 |
x* | 表示零个或多个 x |
(xy)* | 表示零个或多个 xy |
x+ | 表示 x 的重复,至少一次 |
x? | 表示一个或零个 x |
(xy)? | 表示一个或没有 xy |
[abc] | 表示包含一组值中的一个 |
[0-9] | 表示包含从 0 到 9 的值的范围 |
x{5} | 表示恰好有 5 个 x(连续的) |
x{5,} | 表示至少有 5 个 x(连续的) |
x{5,8} | 表示至少 5 个但最多 8 个 x(连续的) |
(xyz){2} | 表示恰好有 2 个 xyz(连续的) |
例如,验证社会安全号码的模式是 \d{3}-\d{2}-\d{4} 先前的模式代码对 emailAddressType \w+\W*\w*@{1}\w+\W*\w+.\w+.*\w* 进行了检查 | ||
[w+] | 表示至少一个单词(字母数字)字符, | 例如:answer |
[W*] | 后面跟着零个、一个或多个非单词字符, | 例如:- |
[w*@{1}] | 后面跟着任何(或没有)单词字符和一个 at 符号, | 例如:my@ |
[w+] | 后面跟着至少一个单词字符, | 例如:mail |
[W*] | 后面跟着零个、一个或多个非单词字符, | 例如:_ |
[w+.] | 后面跟着至少一个单词字符和一个句号, | 例如:please. |
[w+.*] | 零到无限次,后面跟着前面的字符串, | 例如:opentourism. |
[w*] | 最后跟着零个、一个或多个单词字符 | 例如:org |
电子邮件地址:answer-my@mail_please.opentourism.org |
- 上一章中列出的错误对于本章中的错误也很有用。