我还没有找到关于在 xslt 中进行 muenchian-grouping 时如何生成密钥的答案。我发现的示例都有非常简单的 xml 文件。给定以下 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<despatch-advice>
<message-id>2012041715435517181</message-id>
<message-creation>2012-04-17T15:43:55.000+02:00</message-creation>
<originatingFlow>DespatchAdvice</originatingFlow>
<shipment>
<transport-mode>Sea</transport-mode>
<transport-id>1111</transport-id>
<order-line>
<order>123</order>
<order-date>2012-01-17+01:00</order-date>
<selling-code>ME</selling-code>
</order-line>
</shipment>
<shipment>
<transport-mode>Sea</transport-mode>
<transport-id>2222</transport-id>
<order-line>
<order>456</order>
<order-date>2012-01-17+01:00</order-date>
<selling-code>ME</selling-code>
</order-line>
<order-line>
<order>789</order>
<order-date>2012-01-17+01:00</order-date>
<selling-code>ME</selling-code>
</order-line>
<order-line>
<order>832</order>
<order-date>2012-01-17+01:00</order-date>
<selling-code>XM</selling-code>
</order-line>
</shipment>
<shipment>
<transport-mode>Air</transport-mode>
<transport-id>333</transport-id>
<order-line>
<order>781</order>
<order-date>2012-01-17+01:00</order-date>
<selling-code>XM</selling-code>
</order-line>
<order-line>
<order>789</order>
<order-date>2012-01-17+01:00</order-date>
<selling-code>XM</selling-code>
</order-line>
</shipment>
我想做的是对每批货物中每个销售代码的订单行进行分组。
在我的 xslt 文件中,我将密钥定义如下:
<xsl:key name="groups" match="order-line" use="selling-code"/>
在创建 xml 文件的第一部分后,我执行以下操作:
<xsl:for-each select="order-line[generate-id(.)=generate-id(key('groups',selling-code)[1])]">
<ns0:order-line-group>
<xsl:for-each select="key('groups',selling-code)">
<ns0:order-line>
我希望 xml 文件将从当前<shipment
> 节点解析,并且构建的密钥将仅使用<order-line
> 节点进行该特定装运。但相反,我在文件中得到了三个<shipment
> 包含所有<order-line
> 节点的节点。因此,似乎在创建密钥时总是从根目录解析 xml 文件?是这样吗?有没有解决的办法?