如何在XSLT中添加包含“(?)”的值的不同键?

时间:2015-09-02 11:55:38

标签: xml xslt key

在我的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

1 个答案:

答案 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>&#xA;</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),都具有相同的结果(后者在序言后添加了一个非必需的额外白线)。

所以(这就是为什么目前这不是真的答案),您能否更新您的问题以提供您当前错误的可验证示例?