gpt4 book ai didi

java - XSLT:应用模板时不包含多个子元素

转载 作者:行者123 更新时间:2023-12-01 14:01:28 26 4
gpt4 key购买 nike

尝试从根元素移动直接子元素,然后将它们复制到新的根元素下。能够在一个子元素上执行此操作,但不确定如何在 select 语句中应用 or
递归子元素的当前 XSLT:

<xsl:template match="Element1">
<Information>
<xsl:apply-templates select="*[name()!='Element1']"/>
</Information>
<xsl:apply-templates select="Element1"/>
</xsl:template>
<xsl:template match="Element1/Element1">
<Metadata>
<xsl:apply-templates/>
</Metadata>
</xsl:template>

我想对另一个子元素应用相同的内容并尝试过

<xsl:template match="Element1">
<Information>
<xsl:apply-templates select="*[name()!='Element1'] | *[name()!='Element2']"/>
</Information>
<xsl:apply-templates select="Element1"/>
</xsl:template>
<xsl:template match="Element1/Element1">
<Metadata>
<xsl:apply-templates/>
</Metadata>
</xsl:template>

<xsl:template match="Element1/Element2">
<Metadata2>
<xsl:apply-templates/>
</Metadata2>
</xsl:template>

但是没有成功。请帮忙。

最佳答案

您可能想要尝试将这些模板放入一个组中,并使用空模板删除您不需要的模板。向 apply-template 添加模式

<xsl:apply-templates select="*" mode="metadata"/>

激活组,然后在组中定义模板

<xsl:template match="*" mode="metadata"/>
<xsl:template match="Element1" mode="metadata">
...
<xsl:template>
<xsl:template match="Element2" mode="metadata">
...
<xsl:template>

用于元数据 block 。

<小时/>

使用模式,您的模板将如下所示:

<xsl:template match="Element1">
<Information>
<!-- use templates in the information group -->
<xsl:apply-templates select="*" mode="metadata"/>
</Information>
<xsl:apply-templates select="Element1"/>
</xsl:template>

<!-- This template removes unspecified elements -->
<xsl:template match="*" mode="metadata"/>

<xsl:template match="Element1" mode="metadata">
<Metadata>
<xsl:apply-templates/>
</Metadata>
</xsl:template>

<xsl:template match="Element2" mode="metadata">
<Metadata2>
<xsl:apply-templates/>
</Metadata2>
</xsl:template>

您可能还有一些其他模板定义 <Metadata/> 的内容和<Metadata2/> 。这些可能也应该处于该模式。

关于java - XSLT:应用模板时不包含多个子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19321309/

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