要素の1つのXMLグループからデータをフェッチし、別のXMLグループにフィードする方法

ワイヤー

セカンダリまたは別のxmlファイルのデータを使用して、以下のXMLの要素を更新しようとしています。入力XMLとセカンダリXMLファイルの両方に同じ数のセグメントがあります。セカンダリXMLの最初のセグメントで値を取得し、INPUTxmlなどの要素を更新する必要があります。XSLを使用して実行できるかどうかはわかりませんが、誰かに案内してもらえますか。

具体的には、セカンダリXMLの// PDetails / PStatus / Codeと// PDetails / PStatus / Descriptionの値に基づいて<indicator></indicator>それぞれの<iOSection>INPUTXMLを更新しようとしています。

以下はINPUTXMLファイルです。

<IResponse>
    <iOSection>
        <Details>           
            <Info>
                <pNumber>FB061689</pNumber>
                <indicator></indicator>
                <Identifier>1</Identifier>
            </Info>         
        </Details>
        <Token>
            <Reference>1UUYD05BHM21OJCK3881C7F</Reference>
        </Token>
    </iOSection>
    <iOSection>
        <Details>           
            <Info>
                <pNumber>FB061690</pNumber>
                <indicator></indicator>
                <Identifier>2</Identifier>
            </Info>
        </Details>
        <Token>
            <Reference>1UUYD05BHM21OJCK3881C7F</Reference>
        </Token>
    </iOSection>
</IResponse>

以下はセカンダリXMLファイルです-RSPDetailsと呼ばれるxsl変数で利用できます

<RS PartID="abcd" SysID="mnc">  
    <PDetails>
        <PN>FB063586</PN>
        <PStatus>
            <Code>0</Code>
            <Description>Cancelled</Description>
        </PStatus>     
    </PDetails>
    <PDetails>
        <Error>
            <Code>92</Code>
            <Message>failed</Message>
        </Error>
    </PDetails>
</RS>

<indicator>// PDetails / PStatus / Code = '0'および// PDetails / PStatus / Description = 'Cancelled'の場合、の値は'YES'である必要があり、それ以外の場合は 'NO'である必要があります。

条件は、<iOSection>位置1の<PDetails>データを使用して位置1に適用し、位置2のデータ<iOSection>を使用して<PDetails>位置2に適用する必要があります。

期待される出力は次のとおりです。

<IResponse>
    <iOSection>
        <Details>           
            <Info>
                <pNumber>FB061689</pNumber>
                <indicator>YES</indicator>
                <Identifier>1</Identifier>
            </Info>         
        </Details>
        <Token>
            <Reference>1UUYD05BHM21OJCK3881C7F</Reference>
        </Token>
    </iOSection>
    <iOSection>
        <Details>           
            <Info>
                <pNumber>FB061690</pNumber>
                <indicator>NO</indicator>
                <Identifier>2</Identifier>
            </Info>
        </Details>
        <Token>
            <Reference>1UUYD05BHM21OJCK3881C7F</Reference>
        </Token>
    </iOSection>
</IResponse>

XSLの下で試しましたが、どこにも近づきませんでした

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="#all" >

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

    <xsl:template match="/*[local-name()='IResponse']/*[local-name()='iOSection']/*[local-name()='Details']/*[local-name()='Info']/*[local-name()='indicator']">

        <xsl:variable name="RSDetails">
            <RS PartID="abcd" SysID="mnc">
                <PDetails>
                    <PN>FB063586</PN>
                    <PStatus>
                        <Code>0</Code>
                        <Description>Cancelled</Description>
                    </PStatus>
                </PDetails>
                <PDetails>
                    <Error>
                        <Code>92</Code>
                        <Message>failed</Message>
                    </Error>
                </PDetails>
            </RS>       
        </xsl:variable> 

        <xsl:element name="indicator">
            <xsl:variable name="PStatus">
                <xsl:value-of select="$RSDetails/RS/PDetails/PStatus" />
            </xsl:variable>
            <xsl:variable name="Message">
                <xsl:value-of select="$RSDetails/RS/PDetails/Message" />
            </xsl:variable>

            <xsl:choose>
                <xsl:when test="$PStatus='0' and $Message='Cancelled'">
                    <xsl:value-of select="'YES'" />
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="'NO'" />
                </xsl:otherwise>
            </xsl:choose>

        </xsl:element>
        <xsl:copy-of select="@*" />
    </xsl:template>
</xsl:stylesheet>
michael.hor257k

ここで実行したいのは、外部ファイル内の一致するノードから値を検索することです。あなたはそうは言わなかったが、一致するノードはPN値がローカルと一致するノードであると私は推測するpNumber

XSLT 1.0

<xsl:stylesheet version="1.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="RSPDetails" select="document('your_other_file.xml')" />
<xsl:key name="rsp" match="PDetails" use="PN" />

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

<xsl:template match="indicator">
    <xsl:copy>
        <xsl:variable name="pnum" select="../pNumber"/>
        <!-- switch context to the other file -->
        <xsl:for-each select="$RSPDetails">
            <xsl:choose>
                <xsl:when test="key('rsp', $pnum)/PStatus/Code=0 and key('rsp', $pnum)/PStatus/Description='Cancelled'">YES</xsl:when>
                <xsl:otherwise>NO</xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

編集:

位置に基づいてルックアップを行うには、次のことを試してください。

<xsl:template match="indicator">
    <xsl:copy>
        <xsl:variable name="i">
            <xsl:number count="iOSection"/>
        </xsl:variable>
        <xsl:variable name="detail" select="$RSPDetails/RS/PDetails[number($i)]"/>
        <xsl:choose>
            <xsl:when test="$detail/PStatus/Code=0 and $detail/PStatus/Description='Cancelled'">YES</xsl:when>
            <xsl:otherwise>NO</xsl:otherwise>
        </xsl:choose>
    </xsl:copy>
</xsl:template>

<xsl:key>このシナリオでは命令は必要ありません。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

1つのテーブルからXMLデータ型として2番目のテーブルの別の列にすべてのレコードをフェッチする方法

分類Dev

1つのパンダデータフレームの行にあるIDのグループを作成し、それらを使用して別のデータフレームからレコードを抽出する方法

分類Dev

1対多のマップされたフィールドに対応するマッピングが見つからないデータを取得します

分類Dev

LINQを使用して2つのフィールドにデータセットをグループ化する

分類Dev

列2で最も価値のある列1の要素のグループ名ごとに2つのレコードをフェッチします

分類Dev

別のテーブルからデータをフェッチするためにネストされたwhileループを使用すると、whileループに1つのレコードのみが表示されます

分類Dev

PowerShellを使用してXMLファイルをループし、1つのフィールドを別のフィールドにマージします

分類Dev

fbグループから1つのデータとしてデータを送信するAngularReactiveフォーム

分類Dev

グループの色を塗りつぶしの色として別のグループまたは要素に適用するSvgフィルター

分類Dev

xmlタグから特定のフィールドを取得する方法は?

分類Dev

xmlタグから特定のフィールドを取得する方法は?

分類Dev

データベースアンドロイドからグーグルマップデータをフェッチする際の問題

分類Dev

グループは、別のフィールドの2つの同じデータに基づいてフィールドを連結します

分類Dev

PostgreQLは、多次元配列タイプのJsonフィールドからデータをフェッチします

分類Dev

ラバデータウィーバーの1つのフィールドに基づいてメッセージをグループ化する

分類Dev

親タグのないxmlフィールドをJavaリストにマップする方法は?

分類Dev

mongodbで1つのフィールド値をグループ化し、別のフィールドをソートする方法

分類Dev

別のデータを使用して、1つのExcelスプレッドシートでフィルタリングする

分類Dev

コードの外部、つまりXMLファイルでAutoMapperマッピングを定義する方法、または完全に構成可能なオブジェクトマッピングに別のアプローチを使用する方法は?

分類Dev

XMLファイルのフィールドからタグを削除する

分類Dev

データを1つの列でフィルタリングし、別の列でグループ化する方法

分類Dev

2つのグループから同じ数の要素をランダムに取得します-同じ数の要素を持つ1つのデータフレームから2つのサブデータフレームを作成します

分類Dev

パイプを使用して、いくつかのチェックボックスと検索フィールドでデータフィルタリングを整理するにはどうすればよいですか?

分類Dev

別の名前を使用してモデルからフィールドにマップする方法

分類Dev

「いくつかのデフォルト選択が行われているマルチチェックボックスフィルターを使用して、serverSideで剣道グリッドデータをフィルター処理する」方法

分類Dev

応答からのデータ値のフェッチに関して1つのヘルプが必要です

分類Dev

別のフェッチの結果に応じて、データベース内の別のテーブルからデータをフェッチする方法

分類Dev

mysqlの別のテーブルからフィールドをグループ化して2つの異なるテーブルから2つのフィールドのカウントを取得する方法

分類Dev

pandasgroupbyの後にグループのいくつかの要素のみをフィルタリングします

Related 関連記事

  1. 1

    1つのテーブルからXMLデータ型として2番目のテーブルの別の列にすべてのレコードをフェッチする方法

  2. 2

    1つのパンダデータフレームの行にあるIDのグループを作成し、それらを使用して別のデータフレームからレコードを抽出する方法

  3. 3

    1対多のマップされたフィールドに対応するマッピングが見つからないデータを取得します

  4. 4

    LINQを使用して2つのフィールドにデータセットをグループ化する

  5. 5

    列2で最も価値のある列1の要素のグループ名ごとに2つのレコードをフェッチします

  6. 6

    別のテーブルからデータをフェッチするためにネストされたwhileループを使用すると、whileループに1つのレコードのみが表示されます

  7. 7

    PowerShellを使用してXMLファイルをループし、1つのフィールドを別のフィールドにマージします

  8. 8

    fbグループから1つのデータとしてデータを送信するAngularReactiveフォーム

  9. 9

    グループの色を塗りつぶしの色として別のグループまたは要素に適用するSvgフィルター

  10. 10

    xmlタグから特定のフィールドを取得する方法は?

  11. 11

    xmlタグから特定のフィールドを取得する方法は?

  12. 12

    データベースアンドロイドからグーグルマップデータをフェッチする際の問題

  13. 13

    グループは、別のフィールドの2つの同じデータに基づいてフィールドを連結します

  14. 14

    PostgreQLは、多次元配列タイプのJsonフィールドからデータをフェッチします

  15. 15

    ラバデータウィーバーの1つのフィールドに基づいてメッセージをグループ化する

  16. 16

    親タグのないxmlフィールドをJavaリストにマップする方法は?

  17. 17

    mongodbで1つのフィールド値をグループ化し、別のフィールドをソートする方法

  18. 18

    別のデータを使用して、1つのExcelスプレッドシートでフィルタリングする

  19. 19

    コードの外部、つまりXMLファイルでAutoMapperマッピングを定義する方法、または完全に構成可能なオブジェクトマッピングに別のアプローチを使用する方法は?

  20. 20

    XMLファイルのフィールドからタグを削除する

  21. 21

    データを1つの列でフィルタリングし、別の列でグループ化する方法

  22. 22

    2つのグループから同じ数の要素をランダムに取得します-同じ数の要素を持つ1つのデータフレームから2つのサブデータフレームを作成します

  23. 23

    パイプを使用して、いくつかのチェックボックスと検索フィールドでデータフィルタリングを整理するにはどうすればよいですか?

  24. 24

    別の名前を使用してモデルからフィールドにマップする方法

  25. 25

    「いくつかのデフォルト選択が行われているマルチチェックボックスフィルターを使用して、serverSideで剣道グリッドデータをフィルター処理する」方法

  26. 26

    応答からのデータ値のフェッチに関して1つのヘルプが必要です

  27. 27

    別のフェッチの結果に応じて、データベース内の別のテーブルからデータをフェッチする方法

  28. 28

    mysqlの別のテーブルからフィールドをグループ化して2つの異なるテーブルから2つのフィールドのカウントを取得する方法

  29. 29

    pandasgroupbyの後にグループのいくつかの要素のみをフィルタリングします

ホットタグ

アーカイブ