2015-09-02 5 views
1

В моем файле XSL создать индекс, как это:Как добавить разные ключи из значений, содержащих «(?)» В XSLT?

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

Интересно из двух различных значений, один из которых содержит «(?)» только этот отправляется на выход. Например. вместо «Бознаньска, Ольга (1865-1940) (?)» и «Бознаньска, Ольга (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

Просьба указать правильный ввод, полный XSLT и соответствующий ожидаемый результат. –

ответ

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), все с тем же результатом (последний добавляет необязательную дополнительную whiteline после пролога).

Так что (и поэтому в настоящее время это не действительно ответ), можете ли вы обновить свой вопрос, чтобы дать проверяемый пример вашей настоящей ошибки?

+0

Хорошие новости! Тогда это, скорее всего, что-то еще. Входной XML является огромным, и здесь его невозможно было бы вставить. Я попытаюсь изолировать проблему и отправить пример. – helcim

+2

@helcim, я не предлагаю вам вставить его здесь. Я предлагаю создать минимальный пример, который повторяет вашу ошибку. Только процесс этого может уже указывать на проблему. В противном случае все, что мы можем сделать, это догадываться. См. [Mcve] для получения дополнительной информации о том, как это сделать. – Abel

+0

Действительно. Меня обманули ложным предположением, предположительно, странной последовательностью, содержащей вопросительный знак. Преступник был плохо разработанным xsl: если я считал это безобидным, но который не позволял выводить все записи в конце. Все отлично с функцией key() :) – helcim

Смежные вопросы