在我的xsl文件中,我创建了一个这样的索引:
<xsl:key name="creators" match="dc:creator" use="."/>
然后迭代以查找dc:creator
<xsl:for-each select="//dc:creator[generate-id() = generate-id(key('creators',.))]">
<xsl:value-of select="."/>
</xsl:for-each>
有趣的是,有两个不同的值,其中一个包含“(?)”,只有这一个被发送到输出。例如。而不是“Boznańska,Olga(1865-1940)(?)”和“Boznańska,Olga(1865-1940)”,我只得到“Boznańska,Olga(1865-1940)(?)”。我的xsltproc -version
给出了
Using libxml 20901, libxslt 10128 and libexslt 817
xsltproc was compiled against libxml 20902,
libxslt 10128 and libexslt 817 libxslt 10128 was compiled against libxml 20902
libexslt 817 was compiled against libxml 20902
答案 0 :(得分:1)
(抱歉,这应该发表评论,但不适合,也许会导致解决方案)
如果我尝试使用 How to create a Minimal, Complete, and Verifiable example 重新创建您的情况,只能提出类似的结果:
输入XML ::
<root xmlns:dc="dc">
<dc:creator>Boznańska, Olga (1865-1940)</dc:creator>
<dc:creator>Test1</dc:creator>
<dc:creator>Test2</dc:creator>
<dc:creator>Test2</dc:creator>
<dc:creator>Boznańska, Olga (1865-1940) (?)</dc:creator>
<dc:creator>Boznańska, Olga (1865-1940)</dc:creator>
<dc:creator>Boznańska, Olga (1865-1940) (?)</dc:creator>
<dc:creator>Boznańska, Olga (1865-1940) (?)</dc:creator>
<dc:creator>Boznańska, Olga (1865-1940)</dc:creator>
</root>
XSLT 1.0样式表:
<xsl:stylesheet version="1.0"
xmlns:dc="dc"
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:key name="creators" match="dc:creator" use="."/>
<xsl:template match="/">
<xsl:for-each select="//dc:creator[generate-id() = generate-id(key('creators',.))]">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XML(有点)输出:
<?xml version="1.0" encoding="utf-8"?>Boznańska, Olga (1865-1940)
Test1
Test2
Boznańska, Olga (1865-1940) (?)
换句话说,使用您提供的信息,它“正常”。我尝试使用Xalan,.NET,XsltProc(使用libxsl),都具有相同的结果(后者在序言后添加了一个非必需的额外白线)。
所以(这就是为什么目前这不是真的答案),您能否更新您的问题以提供您当前错误的可验证示例?