【发布时间】:2018-07-16 15:15:42
【问题描述】:
我有一些类似的 XML:
farms myfarm
animals
pigs
name Oinker
cats
name Willy
farms myfarm2
animals
pigs
name Cheeky
cats
name Fuzz
farms myfarm3
animals
pigs
name Curly
cats
name Elvis
每个动物下都有更多标签。在一般情况下,动物可能因农场而异,但在我的情况下,它们不会。所有农场都有相同的动物。因此,我可以从任何农场获得动物(猫和猪)的集合,尽管更通用的解决方案是汇总来自所有农场的动物。
我想生成一个相反结构的报告,例如:
ANIMAL pigs
myfarm Oinker
myfarm2 Cheeky
myfarm3 Curly
ANIMAL cats
myfarm Willy
myfarm2 Fuzz
myfarm3 Elvis
所以在 XML 中,FARMS 包含 ANIMALS,但在报告中,ANIMALS 包含 FARMS。
我已经做了几次尝试,但最近的尝试是这样的:
xsl:for-each select="/farms[1]/animals"
xsl:variable name="animali" select="."
xsl:for-each select="farms"
.
.
td xsl select="$animali/name" /td
这实际上接近于一个解决方案,因为如果我有 3 个农场,每个农场有 2 只动物,我最终会得到 2 张桌子,每张 3 行。完美!
您可能发现的问题是仅考虑了 Farm #1。所以我最终得到:
ANIMAL pigs
myfarm Oinker
myfarm2 Oinker
myfarm3 Oinker
ANIMAL cats
myfarm Willie
myfarm2 Willie
myfarm3 Willie
我在想也许我需要迭代 FARMS,然后是动物,然后是农场?如果这有意义吗?
欢迎提出建议。
【问题讨论】:
-
我想我现在有一个工作版本,但就像轮胎一样,“她不漂亮”...我循环播放 ANIMALS(获取主表)然后循环播放农场(获取行)然后再次在 ANIMALS 上(过滤掉不在此表中的动物)。我比较了内在的动物(听起来是不是禅宗?)与外在的。如果它们匹配,我打印该行。有效,但达不到我通常的优雅标准...从好的方面来说,我认为它会汇总一般情况。
-
什么版本的 XSLT?这是一个分组问题,分组的处理方式通常取决于您使用的 XSLT 版本。此外,如果您的问题中的输入更新为 XML 而不是您的 XML 的树表示,这将很有帮助。 (输出也应该是您真正想要实现的任何内容(可能是 HTML 表格?)。)
-
XSLT 1.0 - 我研究了分组等。看起来没有希望。我会加入更多 XML 风格