XSLT 2.0移动的节点(在多步骤转化的第一步中创建)(XSLT 2.0 moving a nod

2019-10-29 10:43发布

XML和这一问题的XSLT 2.0文件在被发现https://xsltfiddle.liberty-development.net/6qVRKwX/3

我试图“移动”的元素提前输出HTML的部分。 这个元素是在创建转型的第一部分使用) @mode以脚注的数字插入文本。 所述第一模式fn-add-marker产生<fn-marker/>保持脚注号码。 第二模式number然后插入递增脚注号码。 所有这一切工作正常(通过到线52和68在XSLT小提琴然后后)。

现在我需要“移动”一个元素产生它在模式上的同级元素。 我已经结合了这与HTML输出:最终的想法是,元素<tei:seg>被转换成HTML <p>使得这样的:

<seg type="dep_event">text</seg><fn-marker>incremented no.</fn-marker> 

现在变成这个HTML(其中seg = p ,和fn-marker = sup

<p>text<sup>incremented no.</sup></p>

即。 其中一个条件被满足时,脚注被带到一个同级元素内将被包含在<p>

我插入的代码(下面)的工作原理为4层所需的步骤3来完成这个动作。 这似乎与步骤3相关联的代码不会在定位值<fn-marker/> 但是,如果我删除了这一切,值实际上是在那里! 这让我觉得这是模式的问题。

下面的代码做到这一点:

  1. 输出的每个实例<tei:seg @type="dep_event>"<p> 作品

  2. 创建<sup>内的<seg>满足兄弟条件作品

  3. 的文本()内容复制<fn-marker><sup>满足兄弟条件不起作用

  4. 破坏旧<fn-marker>1</fn-marker> 作品

参照行号在https://xsltfiddle.liberty-development.net/6qVRKwX/3 :

行56-63:

 <xsl:template match="tei:seg[@type='dep_event']">
    <p>
        <xsl:apply-templates/>
        <xsl:if test="following-sibling::node()[1][self::tei:fn-marker]">
            <!-- next line of code does not find a value in /text() -->
            <sup><xsl:value-of select="./following-sibling::node()[1][self::tei:fn-marker/]text()"/></sup>
        </xsl:if>
    </p>
 </xsl:template>

线66:

<xsl:template match="tei:fn-marker[preceding-sibling::node()[1][self::tei:seg[@type='dep_event']]]"/>

提前致谢。

文章来源: XSLT 2.0 moving a node (created in first step of a multi-step transformation)