获取两个自闭合元素之间的文本和 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>
从这样的文档中,我试图得到
- 两个 pb 元素之间的所有文本和元素,当第一个 pb[=28= 的 @n 时]给出,
- 和@n后面和前面的pb/@n,当@n 给出了 pb。
有人可以帮忙吗?我在 SaxonCE 中使用 XSLT 2.0。
编辑:@ 2.紧随其后和紧接其前的。
XPath 2.0 具有运算符 <<
和 >>
因此您的第一个问题将转换为 //node()[. >> $pb1 and . << $pb2]
(在 XSLT 代码中您需要将 <<
转义为 <<
,例如 //node()[. >> $pb1 and . << $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
还是仅查找紧接其前的各个
<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>
从这样的文档中,我试图得到
- 两个 pb 元素之间的所有文本和元素,当第一个 pb[=28= 的 @n 时]给出,
- 和@n后面和前面的pb/@n,当@n 给出了 pb。
有人可以帮忙吗?我在 SaxonCE 中使用 XSLT 2.0。
编辑:@ 2.紧随其后和紧接其前的。
XPath 2.0 具有运算符 <<
和 >>
因此您的第一个问题将转换为 //node()[. >> $pb1 and . << $pb2]
(在 XSLT 代码中您需要将 <<
转义为 <<
,例如 //node()[. >> $pb1 and . << $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
还是仅查找紧接其前的各个