代码之家  ›  专栏  ›  技术社区  ›  helcim

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

  •  1
  • helcim  · 技术社区  · 11 年前

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

    有趣的是,其中一个包含“(?)”的两个不同值只有这一个被发送到输出。E、 g.代替“Boznaska,Olga(1865-1940)(?)”和“奥尔加·博兹纳斯卡(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 回复  |  直到 11 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    (很抱歉,这应该包含在评论中,但它不适合,可能会导致解决方案)

    如果我试图用 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),结果都相同(后者在序言后面添加了一个不需要的额外白线)。

    所以(这就是为什么目前不是 真正地 一个答案),你能更新你的问题,给出一个可验证的例子来说明你目前的错误吗?