簡體   English   中英

分割xml標簽並將其分組到xslt中的另一個標簽中

[英]split xml tag and group it into another tag in xslt

輸入xml

  <root> <ref> <Auth-grp> <given-name>a.</given-name> <surname>aaaa</surname> </Auth-grp> </ref> <ref> <Auth-grp> <surname>bbbb</surname> <given-name>b.</given-name> <surname>cccc</surname> <given-name>c.</given-name> </Auth-grp> </ref> <ref> <Auth-grp> <surname>dddd</surname> <given-name>d.</given-name> </Auth-grp> </ref> </root> 

輸出xml將是:

 <root> <ref> <name> <surname>aaaa</surname> <given-name>a.</given-name> </name> </ref> <ref> <name> <surname>bbbb</surname> <given-name>b.</given-name> </name> <name> <surname>cccc</surname> <given-name>c.</given-name> </name> </ref> <ref> <name> <surname>dddd</surname> <given-name>d.</given-name> </name> </ref> </root> 

誰能幫忙創建xslt 2.0? 無論輸入xml中ref標記的第一個位置存在給定名稱/姓氏的標記如何,然后姓氏應首先出現在輸出xml中。

也許不是最好的解決方案,但它可行:

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

    <xsl:template match="Auth-grp">
        <xsl:for-each select="./*">
            <xsl:if test="position() mod 2 != 0">
                <xsl:element name="name">
                    <xsl:choose>
                        <xsl:when test="local-name() eq 'surname'">
                            <xsl:apply-templates select="." />
                            <xsl:apply-templates select="following-sibling::given-name[1]" />
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:apply-templates select="following-sibling::surname[1]" />
                            <xsl:apply-templates select="." />
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:element>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>

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

</xsl:transform>

這會循環遍歷<Auth-grp>所有子級,但僅處理所有奇數( position() mod 2 != 0 )位置(第一,第三,第五等)。

然后,它檢查此元素是<surname>還是<given-name> 因此,它可以選擇元素的顯示順序。

<name>元素內的分組需要循環本身。

在這里您可以在線嘗試: http : //xsltransform.net/ncntCRY

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM