1

次の XML ファイルを (POSIX 準拠の) シェル スクリプトで作成したいとします。

<xml>
    <item>
        <title>The Turning Point to a Cross Fade in a Carpark</title>
        <slug>the-turning-point-to-a-cross-fade-in-a-carpark</slug>
    </item>
    <item>
        <title>The Cycle Continues in One Direction</title>
        <slug>the-cycle-continues-in-one-direction</slug>
    </item>
</xml>

しかし、私は次のものしか持っていません:

<xml>
    <item>
        <title>The Turning Point to a Cross Fade in a Carpark</title>
    </item>
    <item>
        <title>The Cycle Continues in One Direction</title>
    </item>
</xml>

XMLStarletを使用するedit --updateと (および のみ--update)、次の形式で文字列値の代わりに XPath 式を使用できます。

xml ed -u '/xml/item/slug' -x '../title/text()'

しかし、XPath 2.0 文字列関数は機能していないようです ( xmlXPathCompOpEval: function lower-case not found)。<title>次に、すべてのブロックを繰り返し処理し、要素のテキスト値を使用して要素を生成するにはどうすればよい<slug>でしょうか? xml最小限のアクションでこれを行うにはどうすればよいですか?

4

2 に答える 2

0

何かのようなもの:

translate(../title,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','abcdefghijklmnopqrstuvwxyz-')

于 2013-10-01T20:49:12.950 に答える
0

これは私がこれまでに得たものtranslate()ですnormalize-space()

xml ed -a '/xml/item/title' \
       -t 'elem' \
       -n 'slug' \
       -v '' \
\
       -u '/xml/item/slug' \
       -x 'translate(
               normalize-space(
                   translate(
                       ../title/text(),
                       "AÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ-+.,:;!()&#",
                       "aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz  "
                   )
               ),
               " ",
               "-"
           )'

この背後にある考え方は、

  1. テキストを小文字に変換するには、
  2. すべての強調文字と特殊記号を削除し、
  3. すべてのダッシュとプラス記号をスペースに変換し、
  4. 不要なスペースをすべて削除します。

その文字セットを構成することは、削除するすべての文字を指定する必要があるため、最適とは言えませんが、残す必要がある文字しか知りません。そして、タイプライターのアポストロフィをセットに入れるにはどうすればよいですか?!

私はより良いアイデアを受け入れています。

于 2013-10-01T20:49:26.420 に答える