LaTeX から PrinceXML に移行しています。私がしなければならないことの 1 つは、参考文献を変換することです。.bib
ファイルを HTML に変換しました。ただし、LaTeX がエントリの並べ替えを処理してくれたので、エントリを正しい順序に並べるようには気を配っていませんでしたが、HTML では宣言の順序が重要です。
したがって、私の問題は次のとおりです。Linuxコマンドラインツールを使用して(たとえば、Perlは受け入れられますが、Javascriptは受け入れられません)、次のようにソースファイルをソートするにはどうすればよいですか:
<div id="references">
<h2>References</h2>
<ul>
<li id="reference-to-book-1">
<span class="ref-author">Sample, Peter</span>
<cite><a href="http://example.org/">Online Book 1</a></cite>
<span class="ref-year">2011</span>
</li>
<li id="reference-to-book-2">
<cite>Physical Book 2</cite>
<span class="ref-year">2012</span>
<span class="ref-author">Example, Sandy</span>
</li>
</ul>
</div><!-- references -->
次のようになります。
<div id="references">
<h2>References</h2>
<ul>
<li id="reference-to-book-2">
<span class="ref-author">Example, Sandy</span>
<cite>Physical Book 2</cite>
<span class="ref-year">2012</span>
</li>
<li id="reference-to-book-1">
<span class="ref-author">Sample, Peter</span>
<cite><a href="http://example.org/">Online Book 1</a></cite>
<span class="ref-year">2011</span>
</li>
</ul>
</div><!-- references -->
基準は次のとおりです。
- エントリを含む要素は、
<li>
作成者に従ってアルファベット順にソートされます (つまり、1<li id="
から対応するものまですべて</li>
が単一のブロックとして移動されます)。 - 各エントリ内で、要素は次の順序になっています。
- ラインマッチ
class="ref-author"
- ラインマッチ
<cite>
- ラインマッチ
class="ref-year"
- より多くの要素があります (例:
class="publisher"
わかりやすくするために例から省略しました)。また、この並べ替えの問題に頻繁に遭遇します。そのため、一致させる式を自由に指定できると便利です (たとえば、スクリプト内の配列宣言として)。
- ラインマッチ
- ファイルの残りの部分 ( の外側
/id="references"/,/-- references --/
) は変更されません。 - 結果ファイルでは、ファイル内の位置を除いて、各行は変更されていません (この点が追加されたのは、試した XML パーサーがインデントを壊したためです)。
sed
andを使用して 1、3、および 4 を解決しsort
ましたが、2 をそのように機能させることはできません。