gpt4 book ai didi

xml - 关于如何根据中间 XSLT 结果生成事物的问题

转载 作者:行者123 更新时间:2023-12-04 06:35:33 27 4
gpt4 key购买 nike

通常情况下,XSLT 应该处理原始 XML 文件并提供样式表。

但目前我的任务是,我最终 XML 文件中的最后一个节点应该是一个数字,用于计算我的 RESULTING xml 文件(不是原始文件)中某些类型的节点。

例如,我的初始 XML 是空的,在我的样式表中,我从其他地方抓取数据并将它们插入到这个空的 XML 中以创建某些节点,如下所示:

<Plant>
<Flower>
<Flower1>..</Flower1>
<Flower2>..</Flower2>
</Flower>

<Tree>
<Tree1>...</Tree1>
<Tree2>...</Tree2>
</Tree>

....

<Counter>? </Counter>
</Plant>

我这里的问题是这个Counter节点,它应该是一个数字,表示变形后Plant的子节点有多少个。所以我假设一个两步过程可能是有效的:第一步是做一个中间 XSLT,它获取所有“Plant”数据并填充空的初始 XML 文件;然后第二步是对这个 XML 文件进行简单的 XPath 计数,并附加另一个节点“Counter”来包含这个数字。但是我不确定如何将这两个 XSLT 链接到一个 XSLT(因为需要单击转换),例如如何表示中间 XML 文件以及如何命令 IDE(在我的例子中为 XMLSpy)执行进一步的 XSLT。

提前致谢。

最佳答案

这里是处理转换结果的一般方法,包括计算它的节点:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
>
<xsl:output method="text"/>

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

<xsl:template match="/">
<xsl:variable name="vrtfPass1">
<top>
<xsl:apply-templates select="*"/>
<xsl:apply-templates select="*"/>
</top>
</xsl:variable>

<xsl:variable name="vPass2" select="ext:node-set($vrtfPass1)"/>

<xsl:value-of select="count($vPass2/*/*/*)"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时:

<nums>
<num>1</num>
<num>2</num>
<num>3</num>
<num>4</num>
<num>5</num>
</nums>

产生了正确的结果:

10

在 XSLT 1.0(仅)中,多 channel 处理通常需要使用 xxx:node-set() 扩展函数。 XSLT 2.0 中没有这样的要求,它消除了臭名昭著的 RTF“数据类型”。

关于xml - 关于如何根据中间 XSLT 结果生成事物的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4924585/

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