我想用xsl转换:
<?xml version="1.0" encoding="utf-16"?>
<root>
<value1>test1</value1>
<value2>test2</value2>
<value3>test3</value3>
</root>
in:
<input type="hidden" value="test1" name="value1" />
<input type="hidden" value="test2" name="value2" />
<input type="hidden" value="test3" name="value3" />
最好的方法是什么?
谢谢
答案 0 :(得分:4)
我认为这条规则在语义上是明确的和吸引人的:
<xsl:template match="*[starts-with(name(),'value')]">
<input type="hidden" value="{.}" name="{name()}" />
</xsl:template>
答案 1 :(得分:1)
你的XML设计糟糕;如果可能,您应该使用<value1>
或类似内容来代替<value name="value1">
。
有人说过,你可以这样做:
<xsl:template match="*[starts-with(name(),'value')]">
<xsl:element name="input">
<xsl:attribute name="type">hidden</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="." />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="name()" />
</xsl:attribute>
</xsl:element>
</xsl:template>
如果您的元素为<value name="value1">
,则匹配变为match="value"
,速度更快,名称属性变为<xsl:value-of select="@name">
。