2013-09-19 10 views
0

У меня есть этот XSLTПреобразовать XSLT 2.0 XSLT 1

<?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, пожалуйста, помогите мне.

+1

Какая часть XSLT не работает в вашем процессоре XSLT 1.0? Я не полностью разделяю различия. Когда вы меняете 'version =" 2.0 "' на 'version =" 1.0 "и пытаетесь XSLT, какие ошибки вы получаете? –

ответ

2

С быстрым взглядом единственная конструкция XSLT 2.0 является оператором запятой, используемым дважды в «@ *, node()», который в этом случае можно безопасно заменить на оператор объединения «|».

Конечно, общая задача преобразования XSLT 2.0 в XSLT 1.0 возможна теоретически (оба языка являются Тьюрингом полным, поэтому эквивалентны), но чрезвычайно сложны на практике. Преобразование в этом случае работает только потому, что мы знаем, что «@ *, node()» всегда поставляет последовательность в порядке документа.

Другой оговоркой в ​​том, что, хотя это преобразование легко, я нахожу идею изменения кода, написанного на языке, о котором вы не знаете, довольно страшно. Это похоже на попытку ремонта газового котла, когда вы не знаете, как работают газовые котлы. Я бы не хотел быть в доме, когда вы его пытаетесь.

+0

любите свой ответ – user1457881

Смежные вопросы