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