Xslt转换

时间:2011-02-21 17:36:30

标签: xslt

我想用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" />

最好的方法是什么?

谢谢

2 个答案:

答案 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">