如何将XML文件与XSLT 3.0文件链接?

How to link up XML file with XSLT 3.0 file?

提问人:Kate 提问时间:2/14/2023 更新时间:2/14/2023 访问量:75

问:

我有带有数据的 .xml 文件和带有 html 表的 .xsl。如何链接这些文件? (示例摘自文档:https://www.w3.org/TR/xslt-30/#dt-raw-result) .xml:

<PERSONAE PLAY="OTHELLO">
    <TITLE>Dramatis Personae</TITLE>
    <PERSONA>DUKE OF VENICE</PERSONA>
    <PERSONA>BRABANTIO, a senator.</PERSONA>
    <PERSONA>Other Senators.</PERSONA>
    <PERSONA>GRATIANO, brother to Brabantio.</PERSONA>
    <PERSONA>LODOVICO, kinsman to Brabantio.</PERSONA>
    <PERSONA>OTHELLO, a noble Moor in the service of the Venetian state.</PERSONA>
    <PERSONA>CASSIO, his lieutenant.</PERSONA>
    <PERSONA>IAGO, his ancient.</PERSONA>
    <PERSONA>RODERIGO, a Venetian gentleman.</PERSONA>
    <PERSONA>MONTANO, Othello's predecessor in the government of Cyprus.</PERSONA>
    <PERSONA>Clown, servant to Othello. </PERSONA>
    <PERSONA>DESDEMONA, daughter to Brabantio and wife to Othello.</PERSONA>
    <PERSONA>EMILIA, wife to Iago.</PERSONA>
    <PERSONA>BIANCA, mistress to Cassio.</PERSONA>
    <PERSONA>Sailor, Messenger, Herald, Officers, 
             Gentlemen, Musicians, and Attendants.</PERSONA>
  </PERSONAE>

.xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="3.0"
    expand-text="yes">
    
 <xsl:strip-space elements="PERSONAE"/>
 <xsl:template match="PERSONAE">
   <html>
     <head>
       <title>The Cast of {@PLAY}</title>
     </head>
     <body>
       <xsl:apply-templates/>
     </body>
   </html>
 </xsl:template>
 
 <xsl:template match="TITLE">
   <h1>{.}</h1>
 </xsl:template>
 
 <xsl:template match="PERSONA[count(tokenize(., ',') = 2]">
   <p><b>{substring-before(., ',')}</b>: {substring-after(., ',')}</p>
 </xsl:template> 

 <xsl:template match="PERSONA">
   <p><b>{.}</b></p>
 </xsl:template>

</xsl:stylesheet>

先谢谢你!

我已经看过了,但不确定它是否正确(当我启动 .xml 文件时,有一个空白站点)。<?xml-stylesheet type="text/xsl" href="/file name/.xsl"?>

XML xslt xhtml

评论

0赞 Yitzhak Khabinsky 2/14/2023
(1) Web 浏览器不支持 XSLT 1.0 以上版本。(2) 您可以通过 c#、Java、Python 等以编程方式运行 XSLT 转换,或者 (3) 在 XML IDE 中,如 Oxygen、XMLSpy、Liquid Studio、Stylus Studio 等。
0赞 Martin Honnen 2/14/2023
要运行 XSLT 3,您可以在浏览器中使用 Saxon 10(或在某些平台上使用 Saxon 11 甚至 12)以及使用 SaxonJS 2.5 的 Node.js 等选项。Saxon Java 有一个命令行选项,可以将样式表引用与处理指令 saxonica.com/html/documentation11/using-xsl/commandline/... 一起使用。但它会为你创建一个结果文件,如果你的目标是在浏览器中呈现转换结果,那么你需要提供给浏览器。xml-stylesheet
0赞 Kate 2/15/2023
@MartinHonnen,感谢您的回复!这对我来说并不重要 - 我在哪里打开这个文件,但我会阅读它!

答:

0赞 Michael Kay 2/14/2023 #1

这取决于要在何处运行转换,以及如何控制它。通常有三种选择:

(a) 从命令行调用转换,标识源文档和样式表

(b) 使用来自 Java、C#、Javascript 或 Python 等编程语言的 API 调用转换。

(c) 使用 xml 样式表处理指令在 XML 文件中指定样式表,然后使用识别此样式的环境(例如浏览器)“加载”XML 文件。这种方法有两个缺点:(i) 大多数此类环境只能识别 XSLT 1.0,并且 (ii) 它使得在不同场合使用不同的样式表处理同一文档变得非常困难。

实际上,如果您使用的是 XSLT 3.0,那么第一步是选择您的 XSLT 处理器(只有两个处理器受到积极支持,Altova 和 Saxon),然后查看其文档以了解如何调用转换。