1

私はアルファベット順にソートしなければならない本のタイトルを含むこの非常に些細な XML ファイルを持っています。 la、le、les、de、den、det....(など) は、ソート時に考慮されます。

したがって、望ましいソート順は次 とおりです。 高度な教授法 -工芸品、技能、知識の文化的伝達 -空港での1-ダイナミックな中世 -数学、科学、技術の共同推進- Das Kapital - Den v etenskapliga Revolutionen -ダミー用のX ML

<?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 属性の 2 桁目でソート時にジャンプする文字数: 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)"/>

など、If ind='09' または ind='19' まで続きます。

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

さらに複雑なことに、属性 ind は他のタグやラベルと一緒に表示できます。その場合、ind はソートに関係ありません。

どこから始めればよいかまったくわかりません

4

1 に答える 1

1

それぞれに1つ しかない場合は、次のように単純にする必要がありますmarc/marcEntry[@tag='245']catalog

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

substring(marc/marcEntry[@tag='245']/@ind, 2)ind値の 2 番目 (およびそれ以降) の文字が得られ、 は+ 1その値を数値に変換して 1 を加算します。

于 2016-07-11T14:53:58.180 に答える