对XML文件使用内联XSLT

Aks*_*hay 18 xml reflection xslt inline

我有一个XML文件和一个外部XSLT文件.

目前,在我的XML中,我使用href引用外部XSLT链接:

 <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="stylesheet.xsl" ?>
     <mytag>
         <t1> </t1>
         <t2> </t2>
         <t3> <t3>
     <mytag>
Run Code Online (Sandbox Code Playgroud)

我该如何使用内联XSLT?这可能吗?如果有,怎么样?

Mad*_*sen 10

是的,可以将XSLT嵌入XML中.

XSLT 是一个XML文件,因此您只需要确保将其放在XML文件的document元素中,这样XML文件仍然是格式良好的.

实际上,它在XSLT规范中有所描述:

2.7嵌入样式表

通常,XSLT样式表是一个完整的XML文档,其中xsl:stylesheet元素作为文档元素.但是,XSLT样式表也可能嵌入在另一个资源中.两种嵌入形式是可能的:

  • XSLT样式表可以以文本方式嵌入非XML资源中,或者
  • xsl:stylesheet元素可能出现在XML文档中而不是文档元素中.

为了便于第二种嵌入形式,允许xsl:stylesheet元素具有指定唯一标识符的ID属性.

注意:为了使这样的属性与XPath id函数一起使用,它实际上必须在DTD中声明为ID.

以下示例显示了如何使用xml-stylesheet处理指令[XML样式表]来允许文档包含自己的样式表.URI引用使用带有片段标识符的相对URI来定位xsl:stylesheet元素:

<?xml-stylesheet type="text/xml" href="#style1"?>
<!DOCTYPE doc SYSTEM "doc.dtd">
<doc>
<head>
<xsl:stylesheet id="style1"
                version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:import href="doc.xsl"/>
<xsl:template match="id('foo')">
  <fo:block font-weight="bold"><xsl:apply-templates/></fo:block>
</xsl:template>
<xsl:template match="xsl:stylesheet">
  <!-- ignore -->
</xsl:template>
</xsl:stylesheet>
</head>
<body>
<para id="foo">
...
</para>
</body>
</doc>
Run Code Online (Sandbox Code Playgroud)

注意:嵌入在要应用它的文档中的样式表,或者可以包含或导入到如此嵌入的样式表中的样式表通常需要包含一个模板规则,该规则指定要忽略xsl:stylesheet元素.

根据您计划如何利用它,可能不支持嵌入式样式表.例如,在IE 6/7/8中. 有一些解决方法.