XSLT:1つのドキュメントから別のドキュメントにIDを割り当て、複数の同じ値を繰り返します

氏。パーチマン

誰かが次の問題で私を助けることができますか?2つのXMLドキュメントがあります。次のようなTEI:

<?xml version="1.0" encoding="UTF-8"?>
<text>
    <body>
        <div>
            <head>IN ADVENTU DOMINI</head>
            <div type="time:1">
                <ab ana="#head">
                    <hi>aaaa</hi>
                </ab>
            </div>
        </div>
        <div>
            <head>FERIA II.</head>
            <div type="time:1">
                <ab ana="#head">
                    <hi>bbbb</hi>
                </ab>
            </div>
        </div>
        <div>
            <head>FERIA III.</head>
            <div type="time:1">
                <ab ana="#head">
                    <hi>cccc</hi>
                </ab>
            </div>
        </div>
        <div>
            <head>DOMINICA</head>
            <div type="time:1">
                <ab ana="#head">
                    <hi>dddd</hi>
                </ab>
            </div>
        </div>
        <div>
            <head>FERIA II.</head>
            <div type="time:1">
                <ab ana="#head">
                    <hi>eeee</hi>
                </ab>
            </div>
        </div>
        <div>
            <head>FERIA III.</head>
            <div type="time:1">
                <ab ana="#head">
                    <hi>ffff</hi>
                </ab>
            </div>
        </div>
    </body>
</text>

そして次のようなテーブル:

<table>
        <row>
            <cell>IN ADVENTU DOMINI</cell>
            <cell>1234</cell>
        </row>
        <row>
            <cell>FERIA II.</cell>
            <cell>1200</cell>
        </row>
        <row>
            <cell>FERIA III.</cell>
            <cell>1211</cell>
        </row>
        <row>
            <cell>DOMINICA</cell>
            <cell>1299</cell>
        </row>
        <row>
            <cell>FERIA II.</cell>
            <cell>9999</cell>
        </row>
        <row>
            <cell>FERIA III.</cell>
            <cell>8888</cell>
        </row>
</table>

次に<cell>、テーブル<head>の最初の<cell>要素と同じ値を持つTEIの要素にID(テーブルの2番目の要素にあります)を追加します。私は次のXSLTを作成しました。

<xsl:template match="t:head">
        <xsl:variable name="pos" select="count(current())"/>
        <xsl:variable name="ids" select="document('feasts.xml')"/>
        <xsl:variable name="row" select="$ids//row[cell[1]=current()][position()=$pos]"/>

            <xsl:copy>
                <xsl:if test="$row!=''">
                    <xsl:attribute name="xml:id">
                        <xsl:text>CDB.</xsl:text><xsl:value-of select="$row/cell[2]"/>
                    </xsl:attribute>
                </xsl:if>
                <xsl:apply-templates select="*|@*|text()"/>
            </xsl:copy>

 </xsl:template>

$ pos変数で何かをしなければならないことは知っていますが、最初のIDだけでなく、テーブルから正しいIDを取得する方法もわかりません。<head>要素の望ましい出力は次のようになります。

        <head xml:id="CDB.1234">IN ADVENTU DOMINI</head>

        <head xml:id="CDB.1200">FERIA II.</head>

        <head xml:id="CDB.1211">FERIA III.</head>

        <head xml:id="CDB.1299">DOMINICA</head>

        <head xml:id="CDB.9999">FERIA II.</head>

        <head xml:id="CDB.8888">FERIA III.</head>
michael.hor257k

相互参照を解決するには、キーを使用するのが常に最善です。

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:param name="ids" select="document('feasts.xml')"/>

<xsl:key name="grp" match="head" use="." />
<xsl:key name="id" match="row" use="cell[1]" />

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="head">
    <xsl:variable name="i" select="index-of(key('grp', .)/generate-id(), generate-id())"/>
    <head xml:id="CDB.{key('id', ., $ids)[$i]/cell[2]}">
        <xsl:value-of select="."/>
    </head>
 </xsl:template>

</xsl:stylesheet>

入力例に適用すると、結果は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<text>
   <body>
      <div>
         <head xml:id="CDB.1234">IN ADVENTU DOMINI</head>
         <div type="time:1">
            <ab ana="#head">
               <hi>aaaa</hi>
            </ab>
         </div>
      </div>
      <div>
         <head xml:id="CDB.1200">FERIA II.</head>
         <div type="time:1">
            <ab ana="#head">
               <hi>bbbb</hi>
            </ab>
         </div>
      </div>
      <div>
         <head xml:id="CDB.1211">FERIA III.</head>
         <div type="time:1">
            <ab ana="#head">
               <hi>cccc</hi>
            </ab>
         </div>
      </div>
      <div>
         <head xml:id="CDB.1299">DOMINICA</head>
         <div type="time:1">
            <ab ana="#head">
               <hi>dddd</hi>
            </ab>
         </div>
      </div>
      <div>
         <head xml:id="CDB.9999">FERIA II.</head>
         <div type="time:1">
            <ab ana="#head">
               <hi>eeee</hi>
            </ab>
         </div>
      </div>
      <div>
         <head xml:id="CDB.8888">FERIA III.</head>
         <div type="time:1">
            <ab ana="#head">
               <hi>ffff</hi>
            </ab>
         </div>
      </div>
   </body>
</text>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

既存のドキュメントと同じ一意のIDを持つようにGoogleドキュメントを保存する方法はありますか?

分類Dev

C#複数のXMLNodeまたはXMLNodeListを1つのXMLドキュメントから別のXMLドキュメントにコピーする

分類Dev

別のドキュメント内にIDを持つFirestoreからドキュメントを読み取ります

分類Dev

Javaを使用してMongoDBから複数のドキュメントを返す

分類Dev

ドキュメントをMongoDBに挿入し、C#.NetでInsertOneAsyncを使用して同じドキュメントまたはそのIDを返す方法

分類Dev

HTMLドキュメントから変数を保存して別のドキュメントに表示する

分類Dev

VBAWord-ドキュメント内のすべての段落を逆に繰り返します

分類Dev

BeautifulSoupを使用したXML解析:同じドキュメント内で同じIDを持つ複数のテキストコンテンツを取得します

分類Dev

同じドキュメントの値を使用して、JSONBドキュメント内の配列からアイテムを選択します

分類Dev

mongoDBは、ドキュメントと合計値のキーを繰り返し処理します

分類Dev

複数のCSVドキュメントをバインドして変数に割り当てる

分類Dev

複数のドキュメントを出力していたのに、なぜ1つのドキュメントを出力するのですか?

分類Dev

Firebaseドキュメントから値を読み取り、変数と比較してから、ドキュメントの値を変更する方法

分類Dev

Java、Firestore-Android StudioでドキュメントIDの配列リストを使用してFirestoreから複数のドキュメントを取得します

分類Dev

MarkLogicの同じドキュメントに複数のURIがありますか?

分類Dev

AppleScriptを使用して1つのExcelドキュメントから別のExcelドキュメントに列の内容を転送する方法

分類Dev

一連のelasticsearchドキュメントを繰り返し処理し、それらを印刷します

分類Dev

MongoDBとMongooseの複数のドキュメントから1つのドキュメントを作成します

分類Dev

HTMLドキュメントで単語を検索し、その要素にID /クラスを割り当てます

分類Dev

同じ値を持つドキュメントの数をカウントし、mongoDBの別のフィールドを使用してそれらをグループ化するにはどうすればよいですか?

分類Dev

MongoDBの同じ配列から2つのフィールドを持つドキュメントを返す

分類Dev

XSLT-外部XMLドキュメントから特定の値を取得します

分類Dev

正しいページ番号で複数のワークシートを1つのドキュメントに印刷する方法はありますか?

分類Dev

同じドキュメント内のある配列から別の配列にIDでオブジェクトを原子的に移動します

分類Dev

MongoDBは、同じドキュメント内の複数のフィールドから結果をグループ化して計算します

分類Dev

iTextSharpを使用して、1つのドキュメントからフォントを読み取り、そのフォントを新しいドキュメントに埋め込むことはできますか?

分類Dev

数値の倍数で行を割り当てる方法(Excel / Googleドキュメント)

分類Dev

MongoDBで複数のドキュメントを1つのドキュメントに変換する

分類Dev

同じウィンドウで複数のドキュメントを開くことができるPDFビューアはありますか?

Related 関連記事

  1. 1

    既存のドキュメントと同じ一意のIDを持つようにGoogleドキュメントを保存する方法はありますか?

  2. 2

    C#複数のXMLNodeまたはXMLNodeListを1つのXMLドキュメントから別のXMLドキュメントにコピーする

  3. 3

    別のドキュメント内にIDを持つFirestoreからドキュメントを読み取ります

  4. 4

    Javaを使用してMongoDBから複数のドキュメントを返す

  5. 5

    ドキュメントをMongoDBに挿入し、C#.NetでInsertOneAsyncを使用して同じドキュメントまたはそのIDを返す方法

  6. 6

    HTMLドキュメントから変数を保存して別のドキュメントに表示する

  7. 7

    VBAWord-ドキュメント内のすべての段落を逆に繰り返します

  8. 8

    BeautifulSoupを使用したXML解析:同じドキュメント内で同じIDを持つ複数のテキストコンテンツを取得します

  9. 9

    同じドキュメントの値を使用して、JSONBドキュメント内の配列からアイテムを選択します

  10. 10

    mongoDBは、ドキュメントと合計値のキーを繰り返し処理します

  11. 11

    複数のCSVドキュメントをバインドして変数に割り当てる

  12. 12

    複数のドキュメントを出力していたのに、なぜ1つのドキュメントを出力するのですか?

  13. 13

    Firebaseドキュメントから値を読み取り、変数と比較してから、ドキュメントの値を変更する方法

  14. 14

    Java、Firestore-Android StudioでドキュメントIDの配列リストを使用してFirestoreから複数のドキュメントを取得します

  15. 15

    MarkLogicの同じドキュメントに複数のURIがありますか?

  16. 16

    AppleScriptを使用して1つのExcelドキュメントから別のExcelドキュメントに列の内容を転送する方法

  17. 17

    一連のelasticsearchドキュメントを繰り返し処理し、それらを印刷します

  18. 18

    MongoDBとMongooseの複数のドキュメントから1つのドキュメントを作成します

  19. 19

    HTMLドキュメントで単語を検索し、その要素にID /クラスを割り当てます

  20. 20

    同じ値を持つドキュメントの数をカウントし、mongoDBの別のフィールドを使用してそれらをグループ化するにはどうすればよいですか?

  21. 21

    MongoDBの同じ配列から2つのフィールドを持つドキュメントを返す

  22. 22

    XSLT-外部XMLドキュメントから特定の値を取得します

  23. 23

    正しいページ番号で複数のワークシートを1つのドキュメントに印刷する方法はありますか?

  24. 24

    同じドキュメント内のある配列から別の配列にIDでオブジェクトを原子的に移動します

  25. 25

    MongoDBは、同じドキュメント内の複数のフィールドから結果をグループ化して計算します

  26. 26

    iTextSharpを使用して、1つのドキュメントからフォントを読み取り、そのフォントを新しいドキュメントに埋め込むことはできますか?

  27. 27

    数値の倍数で行を割り当てる方法(Excel / Googleドキュメント)

  28. 28

    MongoDBで複数のドキュメントを1つのドキュメントに変換する

  29. 29

    同じウィンドウで複数のドキュメントを開くことができるPDFビューアはありますか?

ホットタグ

アーカイブ