0
環境: XSLT 1.0
變換將各元件在partOne
部和查找@field
屬性使用@find
屬性,然後輸出@value
屬性partTwo
部。有沒有辦法用XSLT變換中的apply-templates替換for-each?
我正在使用for-each
循環,並想知道apply-templates
是否可以工作?
XML
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="file.xslt"?>
<xml>
<partOne>
<target field="hello"/>
<target field="world"/>
</partOne>
<partTwo>
<number input="2" find="hello" value="valone" />
<number input="2" find="world" value="valtwo" />
<number input="2" find="hello" value="valthree" />
<number input="2" find="world" value="valfour" />
</partTwo>
</xml>
XSL
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/xml/partOne/target">
,<xsl:value-of select="@field"/>
<xsl:for-each select="/xml/partTwo/number[@find=current()/@field]">
,<xsl:value-of select="@value"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
輸出:
,hello
,valone
,valthree
,world
,valtwo
,valfour
我得到所需的輸出,然後輸出一些...,valone,valtwo,valthree,valfour,那部分是不正確的。任何想法,爲什麼它這樣做? – Rod
@Rod,請參閱編輯,您當前的方法會處理partTwo兩次,您需要更正匹配'/'的模板中的apply-templates。 –
謝謝,這工作。但是,我認爲'apply-templates'的'select'表達式必須與模板的'match'表達式完全匹配? – Rod