3
4

1 回答 1

3

我会定义一个键来将具有该属性的元素映射到要插入它们的前一个兄弟:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cci="urn:schemas-ccieurope.com"
    xmlns:ccit="http://www.ccieurope.com/xmlns/ccimltables" xmlns:ccix="http://www.ccieurope.com/xmlns/ccimlextensions"
    exclude-result-prefixes="xsl cci ccit ccix">

    <xsl:key name="k1" match="cci:p[@ccix:annotation = 'insertion']"
      use="generate-id(preceding-sibling::cci:p[not(@ccix:annotation)][1])"/>

    <xsl:strip-space elements="*" />
    <xsl:output method="html" encoding="UTF-8" />

    <xsl:template match="/">
        <html>
            <xsl:apply-templates />
        </html>
    </xsl:template>

    <xsl:template match="cci:p[not(@ccix:annotation)]">
      <p>
        <xsl:apply-templates select="node() | key('k1', generate-id())/node()"/>
      </p>
    </xsl:template>

    <xsl:template match="cci:p[@ccix:annotation = 'insertion']"/>

    <xsl:template match="cci:italic">
        <em>
            <xsl:apply-templates />
        </em>
    </xsl:template>

    <xsl:template match="cci:endnote_contrib">
        <em>
            <xsl:apply-templates />
        </em>
    </xsl:template>

    <xsl:template match="cci:extra_leading">
    </xsl:template>

    <xsl:template match="cci:bold">
        <strong>
            <xsl:apply-templates />
        </strong>
    </xsl:template>

    <xsl:template match="cci:subhead">
        <h2 class="cci-subhead">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="ccit:table">
        <table class="cci-table">
            <xsl:apply-templates />
        </table>
    </xsl:template>

    <xsl:template match="ccit:tr">
        <tr>
            <xsl:apply-templates />
        </tr>
    </xsl:template>

    <xsl:template match="ccit:td">
        <td>
            <xsl:value-of select="." />
        </td>
    </xsl:template>

    <xsl:template match="cci:l_category">
        <h2 class="cci-category">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_category_sub">
        <h2 class="cci-category-sub">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region">
        <h2 class="cci-region">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region_location">
        <h2 class="cci-region-location">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="cci:l_region_sub">
        <h2 class="cci-region-sub">
            <xsl:value-of select="." />
        </h2>
    </xsl:template>

    <xsl:template match="factbox_bold">
        <strong>
            <xsl:apply-templates />
        </strong>
    </xsl:template>

    <xsl:template match="cci:factbox_head">
        <strong>
            <xsl:value-of select="." />
        </strong>
    </xsl:template>

    <xsl:template match="cci:z_sym_round_bullet">
        &#8226;
        <xsl:value-of select="." />
    </xsl:template>

    <xsl:template match="cci:z_sym_triangle_bullet">
        &#8226;
        <xsl:value-of select="." />
    </xsl:template>

    <xsl:template match="text()">
        <xsl:value-of select="." />
    </xsl:template>
</xsl:stylesheet>

使用该样式表 Saxon 6.5.5 输出结果

<html>
   <p>OAKLAND, Calif. &#8212; A former student suspected of opening fire at a small Christian college in California, killing seven people
      and wounding three, was targeting a school administrator and former classmates who he felt had treated him unfairly, police
      said yesterday.
   </p>
   <p>Oakland Police Chief Howard Jordan said at a news conference that One Goh, 43, who had been expelled from Oikos University,
      had been cooperative with investigators after being taken into custody but &#8220;not particularly remorseful.&#8221;
   </p>
   <p>&#8220;We know that he came here with the intent of locating an administrator, and she was not here,&#8221; Jordan said. &#8220;He then went
      through the entire building systematically and randomly shooting victims.&#8221;
   </p>
   <p>The midmorning attack at Oikos, a small Oakland college that has links to the Korean-American Christian community, was the
      deadliest shooting rampage on a U.S. college campus since 
   </p>
</html>

对于输入

<cci:body class="element" displayname="body" name="body" xmlns:cci="urn:schemas-ccieurope.com" xmlns:ccix="http://www.ccieurope.com/xmlns/ccimlextensions">
    <cci:p>OAKLAND, Calif. — A former student suspected of opening fire at a small Christian college in California, killing seven people and wounding three, was targeting a school administrator and former classmates who he felt had treated him unfairly, police said yesterday.</cci:p>
    <cci:p>Oakland Police Chief Howard Jordan said at a news conference that One Goh, 43, who had been expelled from Oikos University, had been cooperative with investigators </cci:p>
    <cci:p ccix:annotation="insertion">after being taken into custody but “not particularly remorseful.”&lt;/cci:p>
    <cci:p>“We know that he came here with the intent of locating an administrator, and she was not here,” Jordan said. “He then went through the entire building systematically and randomly shooting victims.”&lt;/cci:p>
    <cci:p>The midmorning attack at Oikos, a small Oakland college that has links to the Korean-American Christian community, was the deadliest shooting rampage on a U.S. college campus since </cci:p>
</cci:body>
于 2012-04-09T17:03:35.473 回答