提问人:MagicWorld 提问时间:11/14/2023 更新时间:11/14/2023 访问量:42
在 XSLT 中简单创建新元素
Simple creation of a new element in XSLT
问:
我知道这应该很简单,但它对我来说并不奏效。 我需要翻译 XML:
<?xml version="1.0" encoding="utf-8"?>
<items>
<element name="Name1" value="Text1"/>
<element name="Name2" value="Text2"/>
<element name="Name3" value="Text3"/>
</items>
到 XML:
<?xml version="1.0"?>
<goods>
<!-- some text -->
<Name1>Text1</Name1>
<Name2>Text2</Name1>
<Name3>Text3</Name1>
</goods>
我创建了 XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<xsl:element name="goods">
<xsl:comment>
some text
</xsl:comment>
</xsl:element>
</xsl:template>
<xsl:template match="/items/element">
<xsl:element name="{@name}">
<xsl:value-of select="@value"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
但这是错误的。我可以将模板放在其他模板上吗?还是有其他解决方案?
答:
0赞
y.arazim
11/14/2023
#1
你可以简单地做:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/items">
<goods>
<xsl:comment>some text</xsl:comment>
<xsl:for-each select="element">
<xsl:element name="{@name}">
<xsl:value-of select="@value"/>
</xsl:element>
</xsl:for-each>
</goods>
</xsl:template>
</xsl:stylesheet>
但是,仅当 中的名称是有效的 XML 元素名称时,这才有效。@name
1赞
Martin Honnen
11/14/2023
#2
您需要处理子节点,例如更改
<xsl:template match="/">
<xsl:element name="goods">
<xsl:comment>
some text
</xsl:comment>
</xsl:element>
</xsl:template>
自
<xsl:template match="/">
<xsl:element name="goods">
<xsl:comment>
some text
</xsl:comment>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
或者,当然,由于您不需要计算元素名称,因此最好、更轻松地使用文本结果元素goods
<xsl:template match="/">
<goods>
<xsl:comment>
some text
</xsl:comment>
<xsl:apply-templates/>
</goods>
</xsl:template>
评论
0赞
MagicWorld
11/14/2023
非常感谢!两种选择都有帮助,但根据问题的情况,这个解决方案是最可靠的!
评论