我有一个相当复杂的XSL任务。我有一个看起来像XSL计数前面唯一排序的节点
<authorlist>
<orgs>
<org id="org1" name="Org A"/>
<org id="org2" name="Org B"/>
<org id="org3" name="Org C"/>
</orgs>
<authors>
<auth name="C. Thor">
<affiliations>
<affil id="org2"/>
<affil id="org3"/>
</affiliations>
</auth>
<auth name="A. Thor">
<affiliations>
<affil id="org3"/>
</affiliations>
</auth>
<auth name="B. Thor">
<affiliations>
<affil id="org1"/>
</affiliations>
</auth>
</authors>
</authorlist>
一个XML文档,我想写一个XSL转换将产生以下(文本)输出
1 Org C
2 Org A
3 Org B
A. Thor ^{1}
B. Thor ^{2}
C. Thor ^{1,3}
也就是说,作者按名称的字母顺序排序。每位作者的姓名都会打印,并附上标明其所属机构的上标。组织按照它们首次出现在排序的作者列表中的顺序进行打印。每位作者可能有多个从属关系。
这里就是我想我需要做的:
- 创建自组织映射到序数,这样我就可以正确的组织进行排序(并把正确的标上作者姓名)的关键。我相信我知道如何做到这一点。
- 要创建该密钥,我需要计算与当前(创建密钥时)组织关联的作者的第一个实例之前的唯一作者关联的数量。我想我知道该怎么做。
- 踢球者是如何定义“之前”和“第一”的。如果我理解正确,则“之前”和“第一个”由文档顺序定义,或者可能由一些模糊的XPath“处理顺序”定义。我非常需要通过按名称字母顺序排列作者来定义“之前”和“第一”。我不知道如何做到这一点,甚至是否有可能。
我可以使用的XSLT处理器是xsltproc,它实现了XSLT 1.0。如果有足够引人注目的情况,我可以考虑制作一个不同的处理器,但有些疑问我可以使用不同的处理器。
真实世界的情况变得更加复杂,因为有一些组织有多个子组织,并且还有两类组织,会员组织和访问者组织,它们打印在单独的列表中并且具有独立的订单为他们的上标。但是,我认为解决上述问题足以完成剩下的工作。
你能解释一下究竟是怎样的A. Thor^{1}'汇合在一起?代表什么是'1',我不知道我明白。 (我猜它指的是'org3',因为如果你按名称排序作者,那将是第一个组织,对吗?) – Tomalak
A. Thor与org3(Org C)有联系。由于A. Thor是第一个(按字母顺序排列的)作者,而org3是A. Thor的第一个隶属关系,所以org3的索引为1.因此,我们有A. Thor^{1},表明A. Thor与索引有关联1,这是组织C.这很混乱,这可能是我为什么挣扎着。 – jsw
Org C如何获得索引1?你的例子中没有任何暗示这一点。另外,你到目前为止尝试过什么?请张贴您现有的工作,并解释为什么它不符合您的需求。 –