由于可能很简单但逃避我的原因,我无法在复制时将以下参考书目排序。
这是XML的一个示例:
<listBibl>
<biblStruct type="book">
<monogr>
<title level="book-title">Magic in the Middle Ages</title>
<author>
<forename>Richard</forename><surname>Kieckhefer</surname>
</author>
<imprint>
<pubPlace>Toronto</pubPlace>
<publisher>Cambridge University Press</publisher>
<date>2000</date>
</imprint>
</monogr>
</biblStruct>
<biblStruct type="journal-article">
<analytic>
<title level="article-title">Social Mentalities and the Cases of Medieval Scepticism</title>
<author>
<forename>Susan</forename><surname>Reynolds</surname>
</author>
</analytic>
<monogr>
<title level="journal-name">Transactions of the Royal Historical Society</title>
<imprint>
<biblScope unit="volume">1</biblScope>
<biblScope unit="page">21-41</biblScope>
<date>1991</date>
</imprint>
</monogr>
</biblStruct>
<biblStruct type="book">
<monogr>
<title level="book-title">Pathways to Medieval Peasants</title>
<editor>
<forename>James Ambrose</forename>
<surname>Raftis</surname>
</editor>
<imprint>
<pubPlace>Toronto</pubPlace>
<publisher>Pontifical Institute of Mediaeval Studies</publisher>
<date>1981</date>
</imprint>
</monogr>
</biblStruct>
<biblStruct type="book">
<monogr>
<title level="book-title">Kingdoms and Communities in Western Europe, 900-1300</title>
<author>
<forename>Susan</forename><surname>Reynolds</surname>
</author>
<imprint>
<pubPlace>Oxford</pubPlace>
<publisher>Oxford University Press</publisher>
<date>1997</date>
</imprint>
</monogr>
</biblStruct>
<listBibl>
每个biblStruct
代表一个具有作者或编辑的作品,它是我的排序基础。
所需的排序逻辑是:
首先排序1:根据biblStruct @type
找到书籍或文章的第一作者并对其进行排序
biblStruct[@type='book']/monogr/author[1]/surname |
biblStruct[@type='journal-article']/analytic/author[1]/surname
然后排序2:获取title @level
并对其进行排序
title[@level='book-title'] | title[@level='article-title']
我现在使用简单的xsl:copy
,即使只是基本的排序也行不通。它只是复制原件。 XSL:
<xsl:template match="listBibl">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="biblStruct[@type='book']/monogr/author[1]/surname | biblStruct[@type='journal-article']/analytic/author[1]/surname "/>
<xsl:sort select="title[@level='book-title'] | title[@level='article-title'] "/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
这应该复制原件,但按作者姓氏排序,然后按每位作者的标题排序。
提前致谢。
答案 0 :(得分:2)
如果你对apply-templates
的孩子listBibl
,那么排序需要相对于那个,所以如果biblStruct
是其中一个孩子,则以biblStruct
开头的路径没有意义,除非你有相互嵌套的元素。并且title
元素是进一步下降的后代,因此以title
开头的路径似乎也错过了目标。
如果您将路径更改为例如
<xsl:apply-templates>
<xsl:sort select=".[@type='book']/monogr/author[1]/surname | .[@type='journal-article']/analytic/author[1]/surname"/>
<xsl:sort select=".//title[@level='book-title'] | .//title[@level='article-title']"/>
</xsl:apply-templates>
我希望你能得到更好的结果。