我正在使用XSLT并想转换它:
<attr>
<header name="UpdateInformation1">
<detail name="info">blah</detail>
</header>
<header name="UpdateInformation2">
<detail name="info">blah2</detail>
</header>
...other headers with different names...
</attr>
对此:
<UpdateInformation>
<info>blah</info>
</UpdateInformation>
<UpdateInformation>
<info>blah2</info>
</UpdateInformation>
...
我一直试图用foreach做到这一点,但我没有取得多大成功。这是我目前所拥有的,但通配符在这种情况下不起作用:
*错误*
<xsl:for-each select="attr/header[@name='UpdateInformation*']">
<UpdateInformation>
<Info>
<xsl:value-of select="detail[@name='info']"/>
</info>
</UpdateInformation>
</xsl:for-each>
*错误*
有什么建议吗?谢谢!
答案 0 :(得分:4)
使用类似的东西:
<xsl:for-each select="attr/header[starts-with(@name, 'UpdateInformation')]">
<UpdateInformation>
<Info>
<xsl:value-of select="detail[@name='info']"/>
</info>
</UpdateInformation>
</xsl:for-each>
EDITED:修改了每个评论的XPath表达式(如下)。
答案 1 :(得分:2)
使用xsl:for-each
元素执行此操作:
<xsl:for-each select="header[starts-with(@name, 'UpdateInformation')]">
<UpdateInformation>
<Info>
<xsl:value-of select="detail"/>
</info>
</UpdateInformation>
</xsl:for-each>
在xslt中使用xsl:template
将是更好的方法,因为这是它的优势:
<xsl:template match="header[starts-with(@name, 'UpdateInformation')]">
<UpdateInformation>
<Info>
<xsl:value-of select="detail"/>
</info>
</UpdateInformation>
</xsl:template>