这是我的XSL:
<xsl:template match="ImageView" >
<view id ="3" src="{@src}" >
<xsl:element name="form">
<xsl:value-of select="@form"/>
</xsl:element>
</view>
</xsl:template>
<xsl:template match="TextView" >
<view id ="5" src="{@src}" >
<xsl:element name="form">
<xsl:value-of select="@form"/>
</xsl:element>
</view>
</xsl:template>
我想知道如果我可以在我的情况下使用通用模板?如果是,我该如何使用它?提前谢谢。
修改
我的XML:
<ImageView
android:id="@+id/3"
android:src="@drawable/icon"
custom:form="SOME_VALUE" />
<TextView
android:id="@+id/5"
android:src="@drawable/icon"
custom:form="SOME_VALUE" />
我的预期结果应该是这样的:
<ImageView >
<view id="3" src="@drawable/icon">
<form> SOME_VALUE</form>
</view>
</ImageView>
同样适用于<TextView>
。我将使用相同的src
和custom:form
值。只有id
会有所不同。
答案 0 :(得分:0)
您需要限定属性名称空间。
您还可以使用xsl:copy
指令复制当前元素,因此两个视图都有一个通用模板。
然后我使用substring-after
函数来获取@id属性的值。
希望这能让你走上正确的道路。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:android="http://android"
xmlns:custom="http://custom" exclude-result-prefixes="android custom">
<xsl:output indent="yes"/>
<xsl:template match="ImageView|TextView">
<xsl:copy>
<view id="{substring-after(@android:id, '/')}" src="{@android:src}">
<form><xsl:value-of select="@custom:form"/></form>
</view>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>