[英]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.