获取两个自闭合元素之间的文本和 following/preceding 元素的数量

Get text between two self-closing elements and number of following/preceding element

<text>
    <pb n="I"/>
    <p>
        <lb/>Lorem ipsum
        <lb/>Lorem ipsum
        <lb/>Lorem ipsum
        <pb n="II"/>
        <lb/>Lorem gipsum
        <lb/>Lorem gipsum
    </p>
    <p>
        <lb/>Lorem gipsum
        <lb/>Lorem gipsum
        <pb n="III"/>
        <lb/>Lorem hipsum
        <lb/>Lorem hipsum
        <lb/>Lorem hipsum
        <lb/>Lorem hipsum
    </p>
    <pb n="IV"/>
    <p>
        <lb/>Lorem dipsum
    </p>
</text>

从这样的文档中,我试图得到

  1. 两个 pb 元素之间的所有文本和元素,当第一个 pb[=28= 的 @n 时]给出,
  2. @n后面和前面的pb/@n,当@n 给出了 pb

有人可以帮忙吗?我在 SaxonCE 中使用 XSLT 2.0。

编辑:@ 2.紧随其后和紧接其前的。

XPath 2.0 具有运算符 <<>> 因此您的第一个问题将转换为 //node()[. >> $pb1 and . << $pb2] (在 XSLT 代码中您需要将 << 转义为 &lt;&lt;,例如 //node()[. >> $pb1 and . &lt;&lt; $pb2])。通过 @n 属性选择 pb 元素应该是显而易见的:<xsl:variable name="pb1" select="//pb[@n = 'foo']"/>。用 <xsl:variable name="pb1" select="key('by-n', 'foo')"/> 定义键 <xsl:key name="by-n" match="pb" use="@n"/> 可能更有效。

您的第二个问题可能会直接转化为轴的使用:$pb1/(preceding::pb | following::pb)/@n。但是,我不确定您是要查找所有前后 pb 还是仅查找紧接其前的各个