对子字符串进行 XSL 排序,其中 atribute 中的值指示从何处开始子字符串



我有一个非常简单的XML文件,其中包含我必须按字母顺序排序的书名,其中排序应该没有引定冠词或不定冠词,即你不能取,a,an,der,das,die,la,le,les,de,den,det....(依此类推)在排序时在帐户中。

因此,所需的排序顺序为:先进的教学方法 - 人工制品、技能和知识的最终传播 - 机场 - 中世纪 - 数学、科学和技术的推广 - 达斯·- 登 v埃滕斯卡普利加革命 - XML 傻

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="indicators.xsl"?>
<report>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="00">XML for dummies</marcEntry>
</marc>
</catalog>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="10">Advanced teaching methods.</marcEntry>
</marc>
</catalog>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="04">Das Kapital</marcEntry>
</marc>
</catalog>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="14">The cultural transmission of artefacts, skills and knowledge</marcEntry>
</marc>
</catalog>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="12">A day at the airport</marcEntry>
</marc>
</catalog>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="14">The dynamic middle ages</marcEntry>
</marc>
</catalog>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="12">A joint promotion of mathematics, science and technology</marcEntry>
</marc>
</catalog>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="04">Den vetenskapliga revolutionen</marcEntry>
</marc>
</catalog>
</report>

排序时要跳过的字符数由属性 ind 中的第二个数字指示:如果 ind='00' 或 ind='10'

<xsl:sort select="substring(marc/marcEntry[@tag='245'],1)"/>

如果 ind='01' 或 ind='11'

<xsl:sort select="substring(marc/marcEntry[@tag='245'],2)"/>

依此类推,直到如果 ind='09' 或 ind='19'

<xsl:sort select="substring(marc/marcEntry[@tag='245'],10)"/>

更复杂的是:属性 ind 可以与其他标签和标签一起出现;如果是这样,ind 与排序无关。

我完全不知道从哪里开始

如果每个catalog只有一个marc/marcEntry[@tag='245'],那么它应该像

<xsl:sort select="substring(marc/marcEntry[@tag='245'],
                            substring(marc/marcEntry[@tag='245']/@ind, 2) + 1)" />

substring(marc/marcEntry[@tag='245']/@ind, 2)ind 值中为您提供第二个(和后续)字符,然后+ 1将该值转换为数字并向其添加一个数字。

相关内容

  • 没有找到相关文章

最新更新