Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 组合XSL文档_Xml_Xslt - Fatal编程技术网

Xml 组合XSL文档

Xml 组合XSL文档,xml,xslt,Xml,Xslt,我使用XSL将docbook文档转换为dita。转换成功,但仍存在不需要的工件。我已经去掉了其中的一些,但是我已经将这些更改保存在转换后运行的另一个XSL中。我的问题是:是否可以将其合并到一个XSL中?当我尝试在docbook2dita.xsl之后添加代码时,似乎没有效果,我是否遗漏了什么 我还考虑将docbook中使用的外部参照更改为DITA中的相关链接。这是个好主意吗?ppl在需要创建相关链接的外部参照时遇到了哪些问题 有没有可能把它合并成一个 单XSL 可以用多个样式表模块在单个转换中表达

我使用XSL将docbook文档转换为dita。转换成功,但仍存在不需要的工件。我已经去掉了其中的一些,但是我已经将这些更改保存在转换后运行的另一个XSL中。我的问题是:是否可以将其合并到一个XSL中?当我尝试在docbook2dita.xsl之后添加代码时,似乎没有效果,我是否遗漏了什么

我还考虑将docbook中使用的外部参照更改为DITA中的相关链接。这是个好主意吗?ppl在需要创建相关链接的外部参照时遇到了哪些问题

有没有可能把它合并成一个 单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.
有没有可能把它合并成一个 单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>