簡體   English   中英

XSLT 2 反向標記化結果

[英]XSLT 2 Reverse tokenized result

我是一名初學者,嘗試使用 XSLT 2.0 將 XML 文件從一個模式移動到另一個模式。 我在大部分文件上都取得了很大的成功,但有一份讓我堅持了下來。 輸入的 XML 元素是地理信息,例如:

<spatial>United States -- Washington -- Asotin county; United States -- Idaho;</spatial>

在上面的示例中,我們有兩個位置,從宏觀到微觀,用分號 (;) 分隔。 但是,生成的架構希望它們以相反的順序排列,並且每個都在它自己的標簽中,並用逗號分隔,即:

<mods:geographic>Asotin county, Washington, United States</mods:geographic>
<mods:geographic>Idaho,  United States</mods:geographic>

我們目前正在使用以下方法,它有效,但將我們限制為 6 個可能的選項(對於我們的測試數據集很好,但我們有大量數據集要轉換並且無法直接控制它們):

<xsl:template match="spatial">
    <xsl:for-each select="tokenize(., ';')">
        <xsl:variable name="spatialPart" select="tokenize(., ' -- ')"/>
            <xsl:if test="normalize-space(.) != ''">
                <!--spatialPart refers to each segment of a full place name; tokenize/separate each segment at space dash dash space-->            
                <geographic>
                    <xsl:value-of separator=", "
                        select="$spatialPart[6], $spatialPart[5], $spatialPart[4], $spatialPart[3], $spatialPart[2], $spatialPart[1]"
                    />
                </geographic>
            </xsl:if>
    </xsl:for-each>
</xsl:template>

我希望能想出可以容納任意數量的 arguments 的東西。 根據其他帖子,我嘗試對此進行數字降序排序,但每次都會引發錯誤(我相信因為它希望排序成為第一條指令,但我不知道以后如何引用它)。

非常感謝任何幫助。

怎么樣:

<xsl:template match="spatial">
    <xsl:for-each select="tokenize(., ';')[normalize-space()]">
        <geographic>
            <xsl:value-of select="reverse(tokenize(., ' -- '))" separator=", "/>
        </geographic>
    </xsl:for-each>
</xsl:template>

暫無
暫無

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

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