xsl:value-of 用作 xsl:元素名称
我有一个带有列表结构的传入 XML 文件:
<list>
<listItem>
<name>elementOne</name>
<value>elementOneValue</name>
</listItem>
<listItem>
<name>elementTwo</name>
<value>elementTwoValue</name>
</listItem>
</list>
我正在尝试将其转换为以下结构:
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>
这是使用 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>
不起作用,因为我假设连续双引号破坏了
标签
<xsl:for-each select="/list/listItem">
<<xsl:value-of select="name"/>>
<xsl:value-of select="value"/>
</<xsl:value-of select="name"/>>
</xsl:for-each>
不起作用,因为我无法使用 <<
或>>
并且
<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 可解析的 <
或 >
。我希望这是一个非常简单的解决方案,但我在互联网上找不到任何记录。我忽略的简单修复是什么?
I have an incoming XML file with a list structure:
<list>
<listItem>
<name>elementOne</name>
<value>elementOneValue</name>
</listItem>
<listItem>
<name>elementTwo</name>
<value>elementTwoValue</name>
</listItem>
</list>
Which I am trying to convert to this structure:
<elementOne>elementOneValue</elementOne>
<elementTwo>elementTwoValue</elementTwo>
This is easy logic to implement with XSL, but I'm running into complications.
<xsl:for-each select="/list/listItem">
<xsl:element name="<xsl:value-of select="name"/>">
<xsl:value-of select="value"/>
</xsl:element>
</xsl:for-each>
Doesn't work because I assume the sequential double quotes are breaking the <xsl:element>
tag
<xsl:for-each select="/list/listItem">
<<xsl:value-of select="name"/>>
<xsl:value-of select="value"/>
</<xsl:value-of select="name"/>>
</xsl:for-each>
Doesn't work because I can't use <<
or >>
and
<xsl:for-each select="/list/listItem">
<<xsl:value-of select="name"/>>
<xsl:value-of select="value"/>
</<xsl:value-of select="name"/>>
</xsl:for-each>
Doesn't work because I end up with > and < in my code instead of XML parseable <
or >
. I expected this to be a very easy solution but I can't find any records for it on the internet. What is the simple fix I'm overlooking?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个完整而简短的解决方案,使用
XSLT 指令:当此转换应用于提供的 XML 文档时(已更正为格式良好):
产生了想要的结果:
请注意:
使用
指令创建具有静态未知名称的元素。AVT 的使用 (Attribute-Value-Template)以紧凑且更易读的方式指定
name
属性。如果
elementOne
和elementTwo
的字符串值不遵守以下词法/句法规则,则可能会引发错误元素名称 (QName)。Here is a complete and short solution, using the
<xsl:element>
XSLT instruction:When this transformation is applied on the provided XML document (corrected to be well-formed):
the wanted result is produced:
Do note:
The use of the
<xsl:element>
instruction to create an element with statically unknown name.The use of AVT (Attribute-Value-Template) to specify the
name
attribute in a compact and more readable way.It is possible for an error to be raised if the string values of
elementOne
andelementTwo
do not obey the lexical/syntactic rules for an element name (QName).我相信您可以使用花括号代替
:I believe you can use curly braces instead of
<xsl:value-of>
:没有尝试过,但这确实有效......
Didn't try it but this sould work...