XSLT:XSLTを使用してxmlデータを階層構造に変換する方法

シャシャンクG

XSLTを使用してフラットXMLファイルから階層XMLファイルを作成しようとしていますが、最善のアプローチがわかりません。

XMLには処理するデータ要素があり、各データ要素には「プロパティ」と「関係」があります。プロパティ-現在のデータに関連する情報が含まれています。関係-子要素(オブジェクト)と親IDに関連する情報が含まれます。

要素の親IDがない場合は、データをレベル1にグループ化し、後続の子要素をレベル2にグループ化する必要があります...以下に示す例には、4つのレベルまでのデータと関係が含まれています。実際のxmlには、さらに多くのレベルが含まれています。for-eachとchoose関数の組み合わせを試しましたが、2つのレベルまでしか取得できませんでした。XSLTでxmlを変換して完全なレベルを取得するのを手伝っていただければ幸いです。前もって感謝します!

入力XML:

<results>
    <content>
        <data>
            <id>12345</id>
            <properties>
                <name>ABC</name>
                <date>2020-07-18</date>
            </properties>
            <relations>
                <object>
                    <data>
                        <id>67890</id>
                    </data>
                </object>
            </relations>
        </data>

        <data>
            <id>67890</id>
            <properties>
                <name>XYZ</name>
                <date>2020-07-18</date>
            </properties>
            <relations>
                <object>
                    <data>
                        <id>22246</id>
                    </data>
                </object>
                <parent>
                    <data>
                        <id>12345</id>
                    </data>
                </parent>
            </relations>
        </data>

        <data>
            <id>22246</id>
            <properties>
                <name>DEF</name>
                <date>2020-07-18</date>
            </properties>
            <relations>
                <object>
                    <data>
                        <id>68681</id>
                    </data>
                </object>
                <parent>
                    <data>
                        <id>67890</id>
                    </data>
                </parent>
            </relations>
        </data>

        <data>
            <id>68681</id>
            <properties>
                <name>UVW</name>
                <date>2020-07-18</date>
            </properties>
            <relations>
                <parent>
                    <data>
                        <id>22246</id>
                    </data>
                </parent>
            </relations>
        </data>
    <content>
</results>

期待される出力:

<results>
    <content>
        <Level>
            <id>12345</id>
            <properties>
                <name>ABC</name>
                <date>2020-07-18</date>
            </properties>
            <relations>
                <object>
                    <data>
                        <id>67890</id>
                    </data>
                </object>
            </relations>
            
            <Leve2>
                <id>67890</id>
                <properties>
                    <name>XYZ</name>
                    <date>2020-07-18</date>
                </properties>
                <relations>
                    <object>
                        <data>
                            <id>22246</id>
                        </data>
                    </object>
                    <parent>
                        <data>
                            <id>12345</id>
                        </data>
                    </parent>
                </relations>
                
                <Leve3>
                    <id>22246</id>
                    <properties>
                        <name>DEF</name>
                        <date>2020-07-18</date>
                    </properties>
                    <relations>
                        <object>
                            <data>
                                <id>68681</id>
                            </data>
                        </object>
                        <parent>
                            <data>
                                <id>67890</id>
                            </data>
                        </parent>
                    </relations>
                    
                    <Leve4>
                        <id>68681</id>
                        <properties>
                            <name>UVW</name>
                            <date>2020-07-18</date>
                        </properties>
                        <relations>
                            <parent>
                                <data>
                                    <id>22246</id>
                                </data>
                            </parent>
                        </relations>
                    </Leve4>
                </Leve3>
            </Leve2>
        </Level>        
    <content>
</results>

階層:

<Level1>
    Parent1
    <Level2>
        Child1
        ...
        <Level3>
            Child1a
            ...
            <Level4>
                Child1aa
                ...
            </Level4>
        </Level3>
    </Level2>
<Level1>

<Level1>
    Parent2
    <Level2>
        Child2
        ...
        <Level3>
            Child2a
            ...
            <Level4>
                Child2aa
                ...
            </Level4>
        </Level3>
    </Level2>
<Level>
...
マイケルケイ

あなたは問題をあまり明確に説明していません。Xの<parent>要素<id>にYのへの参照が含まれている場合、出力でXをYの子にしたいことを前提としています(私がそれが問題であると正しければ、データは多くの問題とは無関係で、それを理解するのを邪魔するだけの混乱するもの)。

この仮定の下で、最初に、特定の親を持つアイテムを簡単に見つけることができるキーを定義します。

<xsl:key name = "parent-key" match = "content / data" use = "relations / parent / object / id" />

次に、1つのレコードを処理するときに、key()関数を使用してその子を取得します。

<xsl:template match="content/data">
  <xsl:param name="level" select="1"/>
  <xsl:element name="Level{$level}">
    <xsl:copy-of select="."/>
    <xsl:apply-templates select="key('parent-key', id)">
      <xsl:with-param name="level" select="$level + 1"/>
    </xsl:apply-templates>
  </xsl:element>
</xsl:template>

次に、最上位の要素から処理を開始します(この例では、これが最初の要素です。常にそうであるかどうかはわかりません)。

<xsl:template match="/">
  <results>
    <content>
      <xsl:apply-templates select="data[1]"/>
    </content>
  </results>
</xsl:template>

未検証。

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

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

編集
0

コメントを追加

0

関連記事

XSLT 1.0を使用してフラットXML構造を階層XMLに変換するにはどうすればよいですか?

C#を使用してデータテーブルを階層データ構造(JSON)に変換する

XSLT1.0を使用してXML構造を変換する方法

Excelからの列単位のJSONデータをPythonを使用して階層構造に変換する

XSLTを使用してXMLデータを変換する

XSLT:フラットXMLを階層XMLに変換します

xslt1.0を使用してテキストファイルを階層配置に変換する方法

階層構造データをJavaに保存する方法は?

XSLTを使用してxml階層をフラット化する

XSLTでXMLデータをCSV形式に変換する方法

階層構造でデータの表現については、Java 8のツリー構造にPOJOを変換します

XSLTを使用したCSVの階層XMLへの変換

perlでXML :: LibXMLを使用して要素の階層構造を取得する方法

フラット構造を階層構造に変換する

XSLT を使用してスキーマ XML を CSV に変換する方法

xsltを使用してxmlをhtmlテーブルに変換する方法

要素タグの代わりにXML属性を使用してXSLTでデータベースを構築する方法

XSLTを使用してすでに変換されたXMLを変換する方法

外部パラメータに基づいてXSLTを使用してXMLを変換する方法は?

オブジェクト配列を階層データ構造に変換する

Spread / PivotまたはReshapeを使用して階層データフレームを変換する方法

フラットxmlデータを階層データxmlに変換する方法2

フラットデータ構造を階層データ構造(Java)に表示する方法

XSLTを使用してXMLをXMLに変換する

フラット データを内部オブジェクトを使用して階層型に変換する JavaScript

XSLT 2.0を使用してcsvファイルを構造化XMLファイルに変換する方法は?

XSLTを使用してXMLファイルを変換する方法

XSLTを使用してXMLを変換する方法は?

xslt を使用してこの xml を変換する方法

TOP 一覧

  1. 1

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  2. 2

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  3. 3

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  6. 6

    Ansibleで複数行のシェルスクリプトを実行する方法

  7. 7

    Python / SciPyのピーク検出アルゴリズム

  8. 8

    画像変更コードを実行してもボタンの画像が変更されない

  9. 9

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  10. 10

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  11. 11

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  12. 12

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  13. 13

    二次導関数を数値計算するときの大きな誤差

  14. 14

    値間の一致を見つける最も簡単な方法は何ですか

  15. 15

    androidsoongビルドシステムによるネイティブコードカバレッジ

  16. 16

    Reactでclsxを使用する方法

  17. 17

    How to access json value by key value in freemarker?

  18. 18

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  19. 19

    PyTesseractを使用した背景色のため、スクリーンショットからテキストを読み取ることができません

  20. 20

    Using Angular's UI-router, how can we make sure the new version of the html partial views are used, rather than the cached version?

  21. 21

    symfonyエラーサーバーが404NotFoundを返しました

ホットタグ

アーカイブ