gpt4 book ai didi

xml - 根据属性值 XSLT 更改元素名称

转载 作者:数据小太阳 更新时间:2023-10-29 02:26:04 24 4
gpt4 key购买 nike

我想使用 XSLT 做一些简单的(或者我认为的)。我想将元素列表拆分为两个,使用重命名元素这个想法是这样形成的 xml:

<elem at="value" id="something"/>
<elem at="value" id="something2"/>
<elem at="random" id="something3"/>

将转换为:

<elemVal id="something"/>
<elemVal id="something2"/>
<elemRa id="something3"/>

(新元素名称是静态的)因此,根据属性的值对元素进行重命名。

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>

<xsl:template match="elem/@at[.='value']">
<xsl:element name="elemVa">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>

到目前为止,我有一个身份模板,但我不明白如何倒退并更改元素名称,同时保持其内容。

最佳答案

代替

<xsl:template match="elem/@at[.='value']">

你需要

<xsl:template match="elem[@at ='value']">

然后创建新元素(文字就足够了)并确保未处理 at 属性:

<xsl:template match="elem[@at ='value']">
<elemVa>
<xsl:apply-templates select="@* except @at | node()"/>
</elemVa>
</xsl:template>

以上是XSLT/XPath 2.0,在1.0可以使用

<xsl:template match="elem[@at ='value']">
<elemVa>
<xsl:apply-templates select="@*[not(local-name() = 'at')] | node()"/>
</elemVa>
</xsl:template>

关于xml - 根据属性值 XSLT 更改元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32891650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com