<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>
从这样的文件中,我想要
有人可以帮忙吗?我正在使用带有SaxonCE的XSLT 2.0。
编辑:@ 2.紧随其后,紧接在前。
答案 0 :(得分:1)
XPath 2.0包含运算符<<
和>>
,因此您的第一个问题将转换为//node()[. >> $pb1 and . << $pb2]
(在XSLT代码中,您需要将<<
转换为<<
,例如//node()[. >> $pb1 and . << $pb2]
)。按pb
属性选择@n
元素应该是显而易见的:<xsl:variable name="pb1" select="//pb[@n = 'foo']"/>
。使用<xsl:key name="by-n" match="pb" use="@n"/>
定义密钥<xsl:variable name="pb1" select="key('by-n', 'foo')"/>
可能会更有效。
您的第二个问题可能直接转换为轴使用:$pb1/(preceding::pb | following::pb)/@n
。不过我不确定你是想要找到所有前面和下面的pb
,还是只想找到前面分别跟随的{。}}。