XSL 对子字符串进行排序,其中属性中的值告诉子字符串从哪里开始
XSL sorting on substrings where a value in an atribute tells where to start the substring
我有一个非常琐碎的 XML-文件,其中包含我必须按字母顺序排序的书名,其中排序应该没有前导定冠词或不定冠词,即你不能接受,a , an, der, das, die, la, le, les, de, den, det....(等等)在排序时考虑在内。
因此,所需的排序顺序是:
A先进的教学方法 - c人工制品、技能和知识的文化传播 - day机场 - d充满活力的中世纪 - A j点促进数学、科学和技术 - Das Kapital - Den vetenskapliga revolutionen - XML for dummies
<?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
将该值转换为数字并向其加一。
我有一个非常琐碎的 XML-文件,其中包含我必须按字母顺序排序的书名,其中排序应该没有前导定冠词或不定冠词,即你不能接受,a , an, der, das, die, la, le, les, de, den, det....(等等)在排序时考虑在内。
因此,所需的排序顺序是: A先进的教学方法 - c人工制品、技能和知识的文化传播 - day机场 - d充满活力的中世纪 - A j点促进数学、科学和技术 - Das Kapital - Den vetenskapliga revolutionen - XML for dummies
<?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
将该值转换为数字并向其加一。