簡體   English   中英

將xslt 2.0轉換為xslt 1

[英]Convert xslt 2.0 to xslt 1

我有這個xslt

<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:data="urn:X-data"
                exclude-result-prefixes="xsd data"
                version="2.0">

<data:convert>
  <convert old="RequestedLoans" new="RequestedLoan"/>
  <convert old="Companies" new="Company"/>
  ...add more here...
</data:convert>

<xsl:key name="converts" match="convert" use="@old"/>

<xsl:template match="*[key('converts',name(.),document(''))]">
  <xsl:element name="{key('converts',name(.),document(''))/@new}"
               namespace="{namespace-uri()}">
    <xsl:apply-templates select="@*,node()"/>
  </xsl:element>
</xsl:template>

<xsl:template match="@*|node()"><!--identity for all other nodes-->
  <xsl:copy>
    <xsl:apply-templates select="@*,node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

我需要在我的應用程序中使用它,但是由於它是XSLT 2.0,所以我不能使用它。 我想知道是否可以將其轉換為XSLT 1.0。 我不了解XSLT,請幫助我。

乍一看,唯一的XSLT 2.0構造是在“ @ *,node()”中使用兩次的逗號運算符,在這種情況下,可以安全地用聯合運算符“ |”代替它。

當然,將XSLT 2.0轉換為XSLT 1.0的一般任務在理論上是可行的(兩種語言都是圖靈完整的,因此是等效的),但在實踐中卻極為困難。 這種轉換在這種情況下僅能起作用,因為我們知道“ @ *,node()”總是按文檔順序傳遞序列。

另一個警告是,盡管這種轉換很容易,但我發現修改以您不知道的語言編寫的代碼的想法非常令人恐懼。 這有點像在不了解燃氣鍋爐工作原理的情況下嘗試修理燃氣鍋爐。 當您嘗試時,我不想在屋子里。

暫無
暫無

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

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