gpt4 book ai didi

xml - XSLT : Copy and modify

转载 作者:行者123 更新时间:2023-12-02 00:47:39 25 4
gpt4 key购买 nike

我有一个不属于任何其他复制和修改答案的用例。

我有以下 XML 片段:

<Elements>
<Irrelevant/>
<Item>
<Misc. subelements>
<Name>A</Name>
<Misc. subelements>
</Item>
<Irrelevant/>
<Item>
<Misc. subelements>
<Name>B</Name>
<Misc. subelements>
</Item>
</Elements>

并需要将其转换为以下片段(后缀“_x”是通过传入的模板参数注入(inject)的,但对于答案,它可以假定始终为“_x”):

<Elements>
<Irrelevant/>
<Item>
<Misc. subelements (copied as-is)>
<Name>A</Name>
<Misc. subelements (copied as-is)>
</Item>
<Item>
<Misc. subelements (copied as-is)>
<Name>A_x</Name>
<Misc. subelements (copied as-is)>
</Item>
<Irrelevant/>
<Item>
<Misc. subelements (copied as-is)>
<Name>B</Name>
<Misc. subelements (copied as-is)>
</Item>
<Item>
<Misc. subelements (copied as-is)>
<Name>B_x</Name>
<Misc. subelements (copied as-is)>
</Item>
</Elements>

即每个 Item 都以其原始形式复制一次,并以修改后的形式复制一次。仅复制原始形式或仅复制修改后的形式我没有问题,但区分当前上下文是复制为原始形式还是修改后的形式是一个挑战。

最佳答案

从身份转换模板开始

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

然后为 Item 添加模板元素

<xsl:template match="Item">
<xsl:copy-of select="."/>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()" mode="change"/>
</xsl:copy>
</xsl:template>

然后为Name写一个模板模式中的元素 change

<xsl:template match="Name" mode="change">
<xsl:copy>
<xsl:value-of select="concat(., $suffix)"/>
</xsl:copy>
</xsl:template>

使用全局参数 <xsl:param name="suffix" select="'_x'"/> .

关于xml - XSLT : Copy and modify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42509807/

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