0
回答本網站上的另一個XSLT問題,我偶然發現XSLT 1.0和2.0之間的區別,我不明白。誰能解釋這裏發生的事情,以及如何解決這些差異?
注意:我正在使用XML Spy版本2011 sp1(x64)。模板規則處理的區別XSLT 1.0 vs 2.0
我輸入XML是
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Manager grade="10" id="26">
<Employee id="1" grade="9"/>
<Employee id="2" grade="8"/>
</Manager>
<Manager grade="10" id="27">
<Employee id="3" grade="9"/>
<Employee id="4" grade="8"/>
<Employee id="5" grade="4"/>
</Manager>
<Manager grade="7" id="28">
<Employee id="6" grade="8"/>
<Employee id="7" grade="7"/>
<Employee id="8" grade="6"/>
<Employee id="9" grade="9"/>
</Manager>
<Manager grade="9" id="29">
<Employee id="10" grade="9"/>
<Employee id="11" grade="8"/>
<Employee id="12" grade="7"/>
</Manager>
</root>
我想選擇有等級大於或等於經理級設定員工。爲此,我寫了下面的1.0變換:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:apply-templates select="root/Manager"/>
</root>
</xsl:template>
<xsl:template match="Manager">
<mgr>
<managerId><xsl:value-of select="@id"/></managerId>
<managerGrade><xsl:value-of select="@grade"/></managerGrade>
<empsSelection>
<xsl:copy-of select="Employee[@grade >= ../@grade]"/>
</empsSelection>
</mgr>
</xsl:template>
</xsl:stylesheet>
輸出被預期
<?xml version="1.0" encoding="UTF-8"?>
<root>
<mgr>
<managerId>26</managerId>
<managerGrade>10</managerGrade>
<empsSelection/>
</mgr>
<mgr>
<managerId>27</managerId>
<managerGrade>10</managerGrade>
<empsSelection/>
</mgr>
<mgr>
<managerId>28</managerId>
<managerGrade>7</managerGrade>
<empsSelection>
<Employee id="6" grade="8"/>
<Employee id="7" grade="7"/>
<Employee id="9" grade="9"/>
</empsSelection>
</mgr>
<mgr>
<managerId>29</managerId>
<managerGrade>9</managerGrade>
<empsSelection>
<Employee id="10" grade="9"/>
</empsSelection>
</mgr>
</root>
但是,當我改變XSLT版本2.0(採取上述的樣式表和變化樣式表/ @版本2.0) ,我得到下面的不同和意想不到的結果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<mgr>
<managerId>26</managerId>
<managerGrade>10</managerGrade>
<empsSelection>
<Employee id="1" grade="9"/>
<Employee id="2" grade="8"/>
</empsSelection>
</mgr>
<mgr>
<managerId>27</managerId>
<managerGrade>10</managerGrade>
<empsSelection>
<Employee id="3" grade="9"/>
<Employee id="4" grade="8"/>
<Employee id="5" grade="4"/>
</empsSelection>
</mgr>
<mgr>
<managerId>28</managerId>
<managerGrade>7</managerGrade>
<empsSelection>
<Employee id="6" grade="8"/>
<Employee id="7" grade="7"/>
<Employee id="9" grade="9"/>
</empsSelection>
</mgr>
<mgr>
<managerId>29</managerId>
<managerGrade>9</managerGrade>
<empsSelection>
<Employee id="10" grade="9"/>
</empsSelection>
</mgr>
</root>
這是爲什麼,以及如何應樣式表,以獲得正確的結果在這兩個XSLT 1.0和2.0版本改變?
解決了它(數字功能也可用於1.0) - 謝謝! – Maestro13 2012-02-16 12:48:50
仔細檢查細節,確實字符串比較解釋了這一切。例如,第一個管理項:(「9」> =「10」,「8」> =「10」)給出(true,true) – Maestro13 2012-02-16 15:37:27