>  기사  >  백엔드 개발  >  미친 XML 연구 노트(11) -----------XSLT 설명

미친 XML 연구 노트(11) -----------XSLT 설명

黄舟
黄舟원래의
2017-02-21 14:44:501377검색


XML에 대한 기본 지식은 앞서 정리해두었으니 관심 있으신 분들은 아래 URL

http://www.php.cn/

이미지 및 텍스트 표시 부분에 오류가 있습니다. 기사의 내용을 표시할 수 없으니 양해해 주시기 바랍니다!

확인하고 싶으시면 w3cshool API문서를 다운받으시면 됩니다

http://www.php.cn에 접속하세요 /다운로드

XSLT XSL에서 시작하여 XSLT, XPath 및 XSL-FO로 끝납니다.

XPath에 대해서는 나중에 자세히 설명하겠습니다

XSL로 시작하세요

XSL은 Extensible Stylesheet Language(

EXtensible Sstylesheet Language)를 의미합니다.

W3C(World Wide Web Consortium)는 XML 기반 스타일시트 언어가 필요했기 때문에 XSL 개발을 시작했습니다.

CSS = HTML 스타일 시트

HTML은 미리 정의된 태그를 사용하며, 태그의 의미는

이해하기 쉽습니다 .

HTML 요소의 f5d188ed2c074f8b944552db028f98a1 요소는 테이블을 정의하며 브라우저는

표시 방법을 알고 있습니다.

HTML 요소에 스타일을 추가하는 것은 쉽습니다. CSS를 사용하면 특정 글꼴이나 색상으로 요소를 표시하도록 브라우저에 쉽게 지시할 수 있습니다.

XSL = XML 스타일시트

XML은 미리 정의된 태그를 사용하지 않으며(원하는 태그 이름을 사용할 수 있음) 이러한 태그의 의미

항상 이해하기 쉬운 것은 아닙니다.

f5d188ed2c074f8b944552db028f98a1 요소는 HTML 테이블, 가구 또는 기타 항목을 의미합니다. 브라우저

는 이를 표시하는 방법을 모릅니다.

XSL은 XML 문서를 표시하는 방법을

설명할 수 있습니다!

XSL - 단순한 스타일 시트 언어 그 이상

XSL은 세 부분으로 구성됩니다.

  • XSLT

  • XML 문서를 변환하는 언어입니다.

  • XPath

  • XML 문서에서 탐색하기 위한 언어입니다.

  • XSL-FO

  • XML 문서 형식을 지정하는 언어입니다.


XSLT는 XML 문서를 XHTML 문서 또는 다른 XML 문서 언어로 변환하는 데 사용되는 방법입니다. .

XPath는 XML 문서에서 탐색하기 위한 언어입니다.

공부하기 전에 알아야 할 기본 지식:

공부를 계속하기 전에, 공부에 대한 기본적인 이해가 필요합니다. 다음 지식 자세히 알아보기:

  • HTML/XHTML

  • XML/XML 네임스페이스

  • 이러한 프로젝트에 대해 먼저 알아보고 싶다면 다음을 확인하세요. 이 튜토리얼에 액세스할 수 있는 홈 페이지입니다.

XSLT란 무엇인가요?

    XSLT는 XSL 변환을 의미합니다.
  • XSLT는 XSL에서 가장 중요한 부분입니다.
  • XSLT는 하나의 XML 문서를 다른 XML 문서로 변환할 수 있습니다.
  • XSLT는 XPath를 사용하여 XML 문서 내에서 탐색합니다.
  • XPath는 W3C 표준입니다.

XSLT = XSL 변환

XSLT는 XSL에서 가장 중요한 부분입니다.

XSLT는 하나의 XML 문서를 다른 XML 문서 또는 HTML 및 XHTML과 같이 브라우저에서 인식할 수 있는 다른 유형의 문서로 변환하는 데 사용됩니다. 일반적으로 XSLT는 각 XML 요소를 (X)HTML 요소로 변환하여 이를 수행합니다.

XSLT를 사용하면 출력 파일에 요소와 특성을 추가하거나 제거할 수 있습니다. 또한 요소를 재정렬하고, 테스트를 수행하고, 숨기거나 표시할 요소를 결정하는 등의 작업을 수행할 수 있습니다.

변환 프로세스를 설명하는 일반적인 방법은

XSLT가 XML 소스 트리를 XML 결과 트리로 변환

하는 것입니다.

XSLT는 XPath를 사용합니다

XSLT는 XPath를 사용하여 XML 문서에서 정보를 찾습니다. XPath는 요소와 속성을 통해 XML 문서 내에서 탐색하는 데 사용됩니다.

XPath를 먼저 배우고 싶으시다면 XPath 튜토리얼.

어떻게 작동하나요?

변형 프로세스 중에 XSLT는 XPath를 사용하여 하나 이상의 사전 정의된 템플릿과 일치하는 소스 문서의 일부를 정의합니다. 일치하는 항목이 발견되면 XSLT는 소스 문서의 일치하는 부분을 결과 문서로 변환합니다.

올바른 스타일 시트 선언

문서를 XSL로 선언 스타일 시트의 루트 요소는 546143bf8b8ea8880989f18373c3cd24 또는 ae57b9667d2669ae942818b3be7c9e9b

참고: 8bfba33610b8df90976a82ef1f8b7575 및 531584125f9072736f72fc92cb1ce734은 완전히 동의어이며 사용할 수 있습니다!

W3C의 XSLT 표준에 따르면 XSL 스타일 시트를 선언하는 올바른 방법은 다음과 같습니다.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

또는

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

XSLT 요소, 속성 및 특성에 액세스하려면 문서 상단에서 XSLT 네임스페이스를 선언해야 합니다.

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 指向了官方的 W3C XSLT 命名空间。如果您使用此命名空间,就必须包含属性 version="1.0"。

从一个原始的 XML 文档开始

我们现在要把下面这个 XML 文档("cdcatalog.xml")转换为 XHTML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
.
</catalog>

在 Internet Explorer 和 Firefox 中查看 XML 文件:

打开 XML 文件(通常通过点击某个链接) - XML 文档会以颜色化的代码方式来显示根元素及子元素。点击元素左侧的加号或减号可展开或收缩元素的结构。如需查看原始的XML源文件(不带有加号和减号),请在浏览器菜单中选择“查看页面源代码”。

在 Netscape 6 中查看 XML 文件:

打开 XML 文件,然后在 XML 文件中右击,并选择“查看页面源代码”。XML文档会以颜色化的代码方式来显示根元素及子元素。

在 Opera 7 中查看 XML 文件:

打开 XML 文件,然后在XML文件中右击,选择“框架”/“查看源代码”。XML文档将显示为纯文本。

 

创建 XSL 样式表

然后创建一个带有转换模板的 XSL 样式表("cdcatalog.xsl"):

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


  
  
    

My CD Collection

Title Artist

 

把 XSL 样式表链接到 XML 文档

向 XML 文档("cdcatalog.xml")添加 XSL 样式表引用:

<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?><catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
.
</catalog>

 

 

2032d1f3e843089f381a035edc734156 元素

2032d1f3e843089f381a035edc734156 元素用于构建模板。

match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。

好了,让我们看一下上一节中的 XSL 文件的简化版本:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <body>
   <h2>My CD Collection</h2>
   <table border="1">
     <tr bgcolor="#9acd32">
       <th>Title</th>
       <th>Artist</th>
     </tr>
     <tr>
       <td>.</td>
       <td>.</td>
     </tr>
   </table>
 </body>
 </html>
</xsl:template>

</xsl:stylesheet>

代码解释:

由于 XSL 样式表本身也是一个 XML 文档,因此它总是由 XML 声明起始:

<?xml version="1.0" encoding="ISO-8859-1"?>

下一个元素,8bfba33610b8df90976a82ef1f8b7575,定义此文档是一个 XSLT 样式表文档(连同版本号和 XSLT 命名空间属性)。

2032d1f3e843089f381a035edc734156 元素定义了一个模板。而 match="/" 属性则把此模板与 XML 源文档的根相联系。

2032d1f3e843089f381a035edc734156 元素内部的内容定义了写到输出结果的 HTML 代码。

最后两行定义了模板的结尾,及样式表的结尾。

以上转换的结果类似这样:

 

 

02b2fbed6ee2fe75988418f1eace8181 元素

02b2fbed6ee2fe75988418f1eace8181 元素用于提取某个选定节点的值,并把值添加到转换的输出流中:

<?xml version="1.0" encoding="ISO-8859-1"?>



 
 
   

My CD Collection

Title Artist

注释:select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。

上面的转换结果类似这样:

 

 

 


431e46b64b4819f2ac967516fbb4b43f 元素

431e46b64b4819f2ac967516fbb4b43f 元素可用于选取指定的节点集中的每个 XML 元素。

<?xml version="1.0" encoding="ISO-8859-1"?>



  
  
    

My CD Collection

Title Artist

注释:select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。

上面的转换结果类似这样:

 

结果过滤

通过在 431e46b64b4819f2ac967516fbb4b43f 元素中添加一个选择属性的判别式,我们也可以过滤从 XML 文件输出的结果。

<xsl:for-each select="catalog/cd[artist=&#39;Bob Dylan&#39;]">

合法的过滤运算符:

  • =  (等于)

  • != (不等于)

  • < (小于)

  • > (大于)

<?xml version="1.0" encoding="ISO-8859-1"?>



 
  
  

My CD Collection

<xsl:for-each select="catalog/cd[artist=&#39;Bob Dylan&#39;]">
Title Artist

上面的转换结果类似这样:

 


f3a7eb5c7af94a622c8698ad8c159369 元素用于对结果进行排序。

在何处放置排序信息

如需对结果进行排序,只要简单地在 XSL 文件中的 431e46b64b4819f2ac967516fbb4b43f 元素内部添加一个 f3a7eb5c7af94a622c8698ad8c159369 元素:

<?xml version="1.0" encoding="ISO-8859-1"?>



  
  
    

My CD Collection

Title Artist

注释:select 属性指示需要排序的 XML 元素。

上面的转换结果类似这样:

 

 

 

 


28d7e7bce771845b11cc99f4b371fb36 元素

如需放置针对 XML 文件内容的条件测试,请向 XSL 文档添加 28d7e7bce771845b11cc99f4b371fb36 元素。

语法

<xsl:if test="expression">
  ...
  ...如果条件成立则输出...
  ...
</xsl:if>

在何处放置 28d7e7bce771845b11cc99f4b371fb36 元素

如需添加有条件的测试,请在 XSL 文件中的 431e46b64b4819f2ac967516fbb4b43f 元素内部添加 28d7e7bce771845b11cc99f4b371fb36 元素:

<?xml version="1.0" encoding="ISO-8859-1"?>


  
  
    

My CD Collection

Title Artist

注释:必选的 test 属性的值包含了需要求值的表达式。

上面的代码仅仅会输出价格高于 10 的 CD 的 title 和 artist 元素。

上面的转换结果类似这样:

 

 

 

 

 


3e08d16b69ca6dceb52122b5e3e896ec 元素

语法

<xsl:choose>
  <xsl:when test="expression">
    ... 输出 ...
  </xsl:when>
  <xsl:otherwise>
    ... 输出 ....
  </xsl:otherwise>
</xsl:choose>

在何处放置选择条件

要插入针对 XML 文件的多重条件测试,请向 XSL 文件添加 3e08d16b69ca6dceb52122b5e3e896ec、1aab2a36c3da35537dba594d8b9f335a 以及 b490e3a477a758f8d417150b585fd42a:

<?xml version="1.0" encoding="ISO-8859-1"?>



  
  
    

My CD Collection

Title Artist

上面的代码会在 CD 的价格高于 10 时向 "Artist" 列添加粉色的背景颜色。

上面的转换结果类似这样:

查看此 XML 文件,查看此 XSL 文件,查看结果。

另一个例子

这是另外一个包含两个 1aab2a36c3da35537dba594d8b9f335a 元素的例子:

<?xml version="1.0" encoding="ISO-8859-1"?>



  
  
    

My CD Collection

Title Artist

上面的代码会在 CD 的价格高于 10 时向 "Artist" 列添加粉色的背景颜色,并在 CD 的价格高于 9 且低于等于 10 时向 "Artist" 列添加灰色的背景颜色。

上面的转换结果类似这样:

 

 

 


58ff327a04da27df4a7ce66c0ce40bdf 元素

58ff327a04da27df4a7ce66c0ce40bdf 元素可把一个模板应用于当前的元素或者当前元素的子节点。

假如我们向 58ff327a04da27df4a7ce66c0ce40bdf 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。

请看下面的 XSL 样式表:

<?xml version="1.0" encoding="ISO-8859-1"?>





My CD Collection

Title:
Artist:

 

XSLT 元素

如果您需要有关下列元素的更详细的信息,请点击元素列中的链接。

  • N: 表示最早支持此标签的 Netscape 版本

  • IE: 表示最早支持此标签的 Internet Explorer 版本

注释:在 IE 5 中所支持的元素可能出现非标准的行为,这是由于 IE 5 发布于 XSLT 被确立为正式的 W3C 标准之前。

元素 描述 IE N
apply-imports 应用来自导入样式表中的模版规则。 6.0  
apply-templates 向当前元素或当前元素的子元素应用模板。 5.0 6.0
attribute 向元素添加属性。 5.0 6.0
attribute-set 创建命名的属性集。 6.0 6.0
call-template 调用一个指定的模板。 6.0 6.0
choose 与bb41c5e2afa2e51b56cbbc78bba5590f以及08840e2c213e7be6cb36177580c1b0f8协同使用,来表达多重条件测试。 5.0 6.0
comment 在结果树中创建注释节点。 5.0 6.0
copy 创建当前节点的一个备份(无子节点及属性)。 5.0 6.0
copy-of 创建当前节点的一个备份(带有子节点及属性)。 6.0 6.0
decimal-format 定义当通过 format-number() 函数把数字转换为字符串时,所要使用的字符和符号。 6.0  
element 在输出文档中创建一个元素节点。 5.0 6.0
fallback 假如处理器不支持某个XSLT元素,规定一段备用代码来运行。 6.0  
for-each 遍历指定的节点集中的每个节点。 5.0 6.0
if 包含一个模板,仅当某个指定的条件成立时应用此模板。 5.0 6.0
import 用于把一个样式表中的内容倒入另一个样式表中。 6.0 6.0
include 把一个样式表中的内容包含到另一个样式表中。 6.0 6.0
key 声明一个命名的键。 6.0 6.0
message 向输出写一条消息(用于错误报告)。 6.0 6.0
namespace-alias 把样式表中的命名空间替换为输出中不同的命名空间。 6.0  
number 测定当前节点的整数位置,并对数字进行格式化。 6.0 6.0
otherwise 规定 c88e008ca37f641f1d68866f53b5c0de 元素的默认动作。 5.0 6.0
output 定义输出文档的格式。 6.0 6.0
param 声明一个局部或全局参数。 6.0 6.0
preserve-space 用于定义保留空白的元素。 6.0 6.0
processing-instruction 生成处理指令节点。 5.0 6.0
sort 对结果进行排序。 6.0 6.0
strip-space 定义应当删除空白字符的元素。 6.0 6.0
stylesheet 定义样式表的根元素。 5.0 6.0
template 当指定的节点被匹配时所应用的规则。 5.0 6.0
text 通过样式表生成文本节点。 5.0 6.0
transform 定义样式表的根元素。 6.0 6.0
value-of 提取选定节点的值。 5.0 6.0
variable 声明局部或者全局的变量。 6.0 6.0
when 规定 c88e008ca37f641f1d68866f53b5c0de 元素的动作。 5.0 6.0
with-param 规定需被传入某个模板的参数的值。 6.0 6.0

위 내용은 Crazy XML Study Notes(11)의 내용입니다.------------XSLT에 대한 자세한 내용은 PHP 중국어를 참고하시기 바랍니다. 웹사이트(www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.