我有一个带有列表结构的传入XML文件:
@H_404_1@<list>
<listItem>
<name>elementOne</name>
<value>elementOneValue</name>
</listItem>
<listItem>
<name>elementTwo</name>
<value>elementTwoValue</name>
</listItem>
</list>
我试图转换为这个结构:
@H_404_1@<elementOne>elementOneValue</elementOne> <elementTwo>elementTwoValue</elementTwo>这是使用XSL实现的简单逻辑,但我遇到了并发症.
@H_404_1@<xsl:for-each select="/list/listItem"> <xsl:element name="<xsl:value-of select="name"/>"> <xsl:value-of select="value"/> </xsl:element> </xsl:for-each>不起作用,因为我假设顺序双引号打破< xsl:element>标签
@H_404_1@<xsl:for-each select="/list/listItem"> <<xsl:value-of select="name"/>> <xsl:value-of select="value"/> </<xsl:value-of select="name"/>> </xsl:for-each>不起作用,因为我不能使用<<或>>和
@H_404_1@<xsl:for-each select="/list/listItem"> <<xsl:value-of select="name"/>> <xsl:value-of select="value"/> </<xsl:value-of select="name"/>> </xsl:for-each>不起作用,因为我最终得到>和<在我的代码而不是XML parseable<或者>.我希望这是一个非常简单的解决方案,但我在互联网上找不到它的任何记录.我忽视的简单修复是什么?
这是一个完整而简短的解决方案,使用
<xsl:element>
XSLT指令:
@H_404_1@<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="listItem">
<xsl:element name="{name}">
<xsl:value-of select="value"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
当对提供的XML文档应用此转换时(已更正为格式正确):
@H_404_1@<list> <listItem> <name>elementOne</name> <value>elementOneValue</value> </listItem> <listItem> <name>elementTwo</name> <value>elementTwoValue</value> </listItem> </list>产生了想要的结果:
@H_404_1@<elementOne>elementOneValue</elementOne> <elementTwo>elementTwoValue</elementTwo>请注意:
>使用< xsl:element>创建具有静态未知名称的元素的指令.
>使用AVT(Attribute-Value-Template)以紧凑且可读的方式指定name属性.>如果elementOne和elementTwo的字符串值不遵守元素名称(QName)的词法/句法规则,则可能会引发错误.