Xml 组合XSL文档
我使用XSL将docbook文档转换为dita。转换成功,但仍存在不需要的工件。我已经去掉了其中的一些,但是我已经将这些更改保存在转换后运行的另一个XSL中。我的问题是:是否可以将其合并到一个XSL中?当我尝试在docbook2dita.xsl之后添加代码时,似乎没有效果,我是否遗漏了什么 我还考虑将docbook中使用的外部参照更改为DITA中的相关链接。这是个好主意吗?ppl在需要创建相关链接的外部参照时遇到了哪些问题 有没有可能把它合并成一个 单XSL 可以用多个样式表模块在单个转换中表达这一点 如果您不知道DITAXSLT是如何工作的,最好的方法是:对XSLTDITA使用Xml 组合XSL文档,xml,xslt,Xml,Xslt,我使用XSL将docbook文档转换为dita。转换成功,但仍存在不需要的工件。我已经去掉了其中的一些,但是我已经将这些更改保存在转换后运行的另一个XSL中。我的问题是:是否可以将其合并到一个XSL中?当我尝试在docbook2dita.xsl之后添加代码时,似乎没有效果,我是否遗漏了什么 我还考虑将docbook中使用的外部参照更改为DITA中的相关链接。这是个好主意吗?ppl在需要创建相关链接的外部参照时遇到了哪些问题 有没有可能把它合并成一个 单XSL 可以用多个样式表模块在单个转换中表达
import
声明,并声明您自己的规则
编辑:示例。假设此样式表base.xsl
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="parent">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="child">
<b>
<xsl:apply-templates/>
</b>
</xsl:template>
</xsl:stylesheet>
输出:
<html>
<p>
<b>1</b>
</p>
<p>
<b>2</b>
</p>
<p>
<b>3</b>
</p>
<p>
<b>4</b>
</p>
</html>
<html>
<div>
<b>1</b>
</div>
<div>
<b>2</b>
</div>
<div>
<b>3</b>
</div>
<div>
<b>4</b>
</div>
</html>
1.
2.
3.
4.
有没有可能把它合并成一个
单XSL
可以用多个样式表模块在单个转换中表达这一点
如果您不知道DITAXSLT是如何工作的,最好的方法是:对XSLTDITA使用import
声明,并声明您自己的规则
编辑:示例。假设此样式表base.xsl
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="parent">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="child">
<b>
<xsl:apply-templates/>
</b>
</xsl:template>
</xsl:stylesheet>
输出:
<html>
<p>
<b>1</b>
</p>
<p>
<b>2</b>
</p>
<p>
<b>3</b>
</p>
<p>
<b>4</b>
</p>
</html>
<html>
<div>
<b>1</b>
</div>
<div>
<b>2</b>
</div>
<div>
<b>3</b>
</div>
<div>
<b>4</b>
</div>
</html>
1.
2.
3.
4.
可以按顺序(链)应用两个或多个转换,每个转换都基于前一个转换的结果
以下是如何将XSLT 2.0中的两个转换链接在一起(XSLT 1.0示例类似,但需要对每个中间结果使用xxx:node-set()
函数):
可以按顺序(链)应用两个或多个变换,每个变换对前一个变换的结果进行操作 以下是如何将XSLT 2.0中的两个转换链接在一起(XSLT 1.0示例类似,但需要对每个中间结果使用
xxx:node-set()
函数):
转换是按顺序应用的,还是所有转换都是并发的?@Ace:使用此方法,您可以用多个模块声明一个转换。因此,它是并发的,因为没有序列。因此,如果我有8个转换(第一个是docbook2dita.xsl,那么其余的顺序无关紧要),我是否有一个“master”。xsl来导入每个转换?或者让每一个导入另一个,这样它就像一个XSL链,在第一个XSL被调用时被调用?@Ace:Order或chain确实很重要。假设此链(具有->含义导入)A->B->C:如果最后两个链中有一个模板与某个节点匹配,则只应用B中的模板,因为它具有更高的导入优先级。现在假设这个链A->B,C:如果最后两个有一个模板移动一个节点(具有相同的计算优先级),这将是一个错误,但是通过错误恢复机制,处理器可以应用最后声明的模板。好的,那么组合这些转换的最佳方式是什么?转换是按顺序应用的吗,或者它们都是并发的?@Ace:使用此方法,您可以用多个模块声明一个转换。因此,它是并发的,因为没有序列。因此,如果我有8个转换(第一个是docbook2dita.xsl,那么其余的顺序无关紧要),我是否有一个“master”。xsl来导入每个转换?或者让每一个导入另一个,这样它就像一个XSL链,在第一个XSL被调用时被调用?@Ace:Order或chain确实很重要。假设此链(具有->含义导入)A->B->C:如果最后两个链中有一个模板与某个节点匹配,则只应用B中的模板,因为它具有更高的导入优先级。现在假设这个链A->B,C:如果最后两个有一个模板移动一个节点(具有相同的计算优先级),这将是一个错误,但是通过错误恢复机制,处理器可以应用最后声明的模板。好的,那么组合这些转换的最佳方法是什么?
<nums>
<num>1</num>
<num>2</num>
<num>3</num>
<num>4</num>
<num>5</num>
</nums>
<nums>
<num>3</num>
<num>5</num>
<num>7</num>
<num>9</num>
<num>11</num>
</nums>