4番目の親ノードからXMLファイルのすべての親ノードに属性と値を入力します

友達

XSLTを初めて使用するので、2番目の親ノードから始まるすべての親ノードに同じ属性と値を追加したいと思います。ここでのロジックは、メインノードがある場合、属性(Mainattribute)は1回であり、メインノードの下の残りのすべての親ノードは、メインノード以外のすべてで同じである異なる属性(childattribute)を持つ必要があります。

以下のような入力xmlがあります:いくつかのフィールドのみがあり、理想的にはより多くのタグがあり、異なる場合があります。

            <?xml version="1.0" encoding="UTF-8"?>
            <Header>
                <Main>
                    <Parent2>
                        <status>12</status>
                        <statusmsg>Helo</status_text>
                    </Parent2>
                    <Parent3>
                        <Child1>112</Child1>
                        <Child2>Hai</Child2>
                    </Parent3>
                    <Parent4>
                        <Child3>Valley</Child3>
                        <Parent5>
                            <Child7>Kind</Child1>
                            <Child8>Pls</Child2>
                        </Parent5>
                    </Parent4>
                </Main>
            </Header>

出力は次のようになります。

        <?xml version="1.0" encoding="UTF-8"?>
        <Header>
            <Main Mainattribute="1">
                <Parent2 childattribute="1">
                    <status>12</status>
                    <statusmsg>Helo</status_text>
                </Parent2>
                <Parent3 childattribute="1">
                    <Child1>112</Child1>
                    <Child2>Hai</Child2>
                </Parent3>
                <Parent4 childattribute="1">
                    <Child3>Valley</Child3>
                    <Parent5 childattribute="1">
                        <Child7>Kind</Child1>
                        <Child8>Pls</Child2>
                    </Parent5>
                </Parent4>
            </Main>
        </Header>

誰かが同じためにXSLTを共有できますか?私は非常に多くのケースを試しましたが、それを達成することができませんでした。ありがとうございました

以下は、XSLTが最初のメインノードに対して試行したものですが、どういうわけかエラーが発生し、それ以上続行できませんでした。

        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:output indent="yes"/>
            <!-- Template to copy all the elements -->
            <xsl:template match="@*|node()">
                <xsl:copy>
                    <xsl:apply-templates select="@*|node()"/>
                </xsl:copy>
            </xsl:template>

            <xsl:template match="Main">
                <Main>
                    <xsl:attribute name="Mainattribute">
                        <xsl:value-of select="1"/>
                    </xsl:attribute>
                    <xsl:apply-templates select="child::node()"/>
                </Main>
            </xsl:template>



        </xsl:stylesheet>
エイドリアンW

@Aniket Vの回答を強化すると、タグの名前に依存する代わりに、モードに頼ることができます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="Main">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:attribute name="Mainattribute"><xsl:value-of select="1"/></xsl:attribute>
            <xsl:apply-templates mode="parent_mode"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*" mode="parent_mode">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:attribute name="childattribute"><xsl:value-of select="1"/></xsl:attribute>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

更新

子を持つすべてのXML要素(最上位要素ではない)を更新する必要がある場合、この変換はあなたのものです:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="Main" priority="1">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:attribute name="Mainattribute"><xsl:value-of select="1"/></xsl:attribute>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*[child::* and ancestor::*]">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:attribute name="childattribute"><xsl:value-of select="1"/></xsl:attribute>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

PowerShellを使用してxmlファイルの親ノードの直接の子ノードを取得します

分類Dev

Powershellを使用して既存のxmlファイルに既存の子ノードを保持することにより、親ノードを追加します-

分類Dev

2 番目の xml ファイルからのデータを使用して xml ノードに値を追加する (マージ)

分類Dev

親ノードのXML応答から値を解析します

分類Dev

親と一緒にxmlファイルから特定のノードを抽出する方法は?

分類Dev

PowerShellを使用してxmlファイルからすべての子ノードを残して親ノードのみをインポートするにはどうすればよいですか?

分類Dev

親ノードneo4jからすべての子ノードを取得します

分類Dev

XSLT:XML属性を要素に変換してから、その値を孫ノードに入力します

分類Dev

XPath:すべての子ノードに特定の値がある場合にのみ親ノードの属性をフェッチします

分類Dev

XSLT:親ノードの属性値を子ノードの属性値と再帰的に連結します

分類Dev

Neo4j-特定のタイプのノードのすべての親ノードを取得します

分類Dev

Javaを使用してXMLファイルからノードのすべての情報を取得します

分類Dev

親ノード属性を使用してRのデータフレームにXMLをロードします

分類Dev

XMLの条件に基づいて、親ノードから子ノードを削除します

分類Dev

XMLの特定の親ノード値とそのすべての子ノード値を使用してマップを作成します

分類Dev

すべてのxml属性を1つのノードから別のノードにコピーします

分類Dev

入力xmlファイルからノード値を読み取り、他の出力xmlファイルに書き込みます

分類Dev

XPATHの子孫値から親ノードを取得します

分類Dev

xmlstarletを使用してxmlを反復処理し、親ノードと子ノードの値を出力します

分類Dev

現在のノードの特定の属性の値に基づいて、リンクされた XML ファイルからテキストを選択します

分類Dev

Pythonを使用してxmlノードのすべての親を取得します

分類Dev

すべてのxmlノードの特定の属性値を別のファイルにエクスポートします

分類Dev

RのXpathを介してxmlファイルのノードから値を取得します

分類Dev

ノードのないexeファイルとしてのjavascript値を入力することが可能です

分類Dev

親ノードのすべての子ノードを取得します

分類Dev

XMLSerializationの使用中に、親ノードのxml属性を作成しようとしています

分類Dev

XDocument Descendants()は、親ノードのすべての子値を表示します

分類Dev

Rを使用してXMLファイルの特定のノードにノードを挿入する

分類Dev

ルートノードの複数のノードのデータをXMLファイルノードからc#に取得します

Related 関連記事

  1. 1

    PowerShellを使用してxmlファイルの親ノードの直接の子ノードを取得します

  2. 2

    Powershellを使用して既存のxmlファイルに既存の子ノードを保持することにより、親ノードを追加します-

  3. 3

    2 番目の xml ファイルからのデータを使用して xml ノードに値を追加する (マージ)

  4. 4

    親ノードのXML応答から値を解析します

  5. 5

    親と一緒にxmlファイルから特定のノードを抽出する方法は?

  6. 6

    PowerShellを使用してxmlファイルからすべての子ノードを残して親ノードのみをインポートするにはどうすればよいですか?

  7. 7

    親ノードneo4jからすべての子ノードを取得します

  8. 8

    XSLT:XML属性を要素に変換してから、その値を孫ノードに入力します

  9. 9

    XPath:すべての子ノードに特定の値がある場合にのみ親ノードの属性をフェッチします

  10. 10

    XSLT:親ノードの属性値を子ノードの属性値と再帰的に連結します

  11. 11

    Neo4j-特定のタイプのノードのすべての親ノードを取得します

  12. 12

    Javaを使用してXMLファイルからノードのすべての情報を取得します

  13. 13

    親ノード属性を使用してRのデータフレームにXMLをロードします

  14. 14

    XMLの条件に基づいて、親ノードから子ノードを削除します

  15. 15

    XMLの特定の親ノード値とそのすべての子ノード値を使用してマップを作成します

  16. 16

    すべてのxml属性を1つのノードから別のノードにコピーします

  17. 17

    入力xmlファイルからノード値を読み取り、他の出力xmlファイルに書き込みます

  18. 18

    XPATHの子孫値から親ノードを取得します

  19. 19

    xmlstarletを使用してxmlを反復処理し、親ノードと子ノードの値を出力します

  20. 20

    現在のノードの特定の属性の値に基づいて、リンクされた XML ファイルからテキストを選択します

  21. 21

    Pythonを使用してxmlノードのすべての親を取得します

  22. 22

    すべてのxmlノードの特定の属性値を別のファイルにエクスポートします

  23. 23

    RのXpathを介してxmlファイルのノードから値を取得します

  24. 24

    ノードのないexeファイルとしてのjavascript値を入力することが可能です

  25. 25

    親ノードのすべての子ノードを取得します

  26. 26

    XMLSerializationの使用中に、親ノードのxml属性を作成しようとしています

  27. 27

    XDocument Descendants()は、親ノードのすべての子値を表示します

  28. 28

    Rを使用してXMLファイルの特定のノードにノードを挿入する

  29. 29

    ルートノードの複数のノードのデータをXMLファイルノードからc#に取得します

ホットタグ

アーカイブ