Tho*_*mer 7 xml xslt templates value-of
我有一个带有列表结构的传入XML文件:
<list>
<listItem>
<name>elementOne</name>
<value>elementOneValue</name>
</listItem>
<listItem>
<name>elementTwo</name>
<value>elementTwoValue</name>
</listItem>
</list>
Run Code Online (Sandbox Code Playgroud)
我试图转换为这个结构:
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>
Run Code Online (Sandbox Code Playgroud)
这是使用XSL实现的简单逻辑,但我遇到了并发症.
<xsl:for-each select="/list/listItem">
<xsl:element name="<xsl:value-of select="name"/>">
<xsl:value-of select="value"/>
</xsl:element>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
不起作用,因为我假设顺序双引号打破了<xsl:element>标记
<xsl:for-each select="/list/listItem">
<<xsl:value-of select="name"/>>
<xsl:value-of select="value"/>
</<xsl:value-of select="name"/>>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
不起作用,因为我不能使用<<或>>和
<xsl:for-each select="/list/listItem">
<<xsl:value-of select="name"/>>
<xsl:value-of select="value"/>
</<xsl:value-of select="name"/>>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
不起作用,因为我最终使用>和<在我的代码而不是XML可解析<或>.我希望这是一个非常简单的解决方案,但我无法在互联网上找到它的任何记录.我忽视的简单修复是什么?
Dim*_*hev 14
这是一个完整而简短的解决方案,使用<xsl:element>XSLT指令:
<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>
Run Code Online (Sandbox Code Playgroud)
当对提供的XML文档应用此转换时(已更正为格式正确):
<list>
<listItem>
<name>elementOne</name>
<value>elementOneValue</value>
</listItem>
<listItem>
<name>elementTwo</name>
<value>elementTwoValue</value>
</listItem>
</list>
Run Code Online (Sandbox Code Playgroud)
产生了想要的结果:
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>
Run Code Online (Sandbox Code Playgroud)
请注意:
使用该<xsl:element>指令创建具有静态未知名称的元素.
使用AVT(属性 - 值 - 模板)以name紧凑且可读的方式指定属性.
如果字符串值为elementOne和elementTwo不遵守元素名称(QName)的词法/语法规则,则可能会引发错误.
我相信你可以使用花括号而不是<xsl:value-of>:
<xsl:element name="{name}">
<xsl:value-of select="value"/>
</xsl:element>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16123 次 |
| 最近记录: |