2012-02-23 2 views
0

В этом я хочу отображать только уникальные записи фруктов. Вот XML тег, что я использую для разбораСохранение в переменной и отображение уникальных записей с использованием XSL

<main> 
<local id="1" type="Primary"> 
-<summary Date="23-02-12"> 
-<fruit>apple</fruit> 
-<fruit>Orange</fruit> 
</summary> 
</local> 
<local id="2" type="Primary"> 
-<summary Date="23-02-12"> 
-<fruit>apple</fruit> 
-<fruit>mango</fruit> 
</summary> 
</local> 
</main> 

Ожидаемый результат должен быть ниже формате

<fruit>apple</fruit> 
<fruit>Orange</fruit> 
<fruit>Mango</fruit> 

Здесь находятся фрагмент кода, что я пытаюсь использовать

<xsl:for-each select="main/local"> 
<xsl:for-each select="symbol/fruit"> 
    <xsl:copy-of select="."/> 
    <xsl:copy-of select="fruit[not(.=$fruit)]"/> 
</xsl:for-each> 
</xsl:for-each> 

Но я не получаю никаких выходных данных для этого, не могли бы вы помочь мне, как я могу удалить эту дублируемую избыточность здесь? Заранее благодарю

+0

возможно дубликат [Чтение записей в цикле и удаление дубликатов записей с помощью XSL] (http://stackoverflow.com/questions/9406061/read-the-entries-in-a-loop-and-remove-the-duplicate-entries-using-xsl) –

+0

Вы уже задали аналогичный вопрос и получили ответ на corect. Почему вы сейчас задаете по существу тот же вопрос? Пожалуйста, прочитайте больше о группировке Muenchian (перейдите по ссылке в ответе на первый вопрос) и группировке в целом. Это не хорошо для вас или для кого-либо, чтобы немного изменить XML-документ и спросить, что составляет по существу тот же вопрос снова. У вас также есть проблемы с пониманием XPath. Пожалуйста, задайте новые, конкретные вопросы XPath - например: «Что выражение XPath выбирает все элементы« fruit »в XML-документе?» –

ответ

0

Для этого в XSLT1.0 вы можете использовать технику под названием «Meunchian». Сначала нужно определить ключ «смотреть вверх» на фруктов элементов на основе значения

<xsl:key name="fruit" match="fruit" use="." /> 

Затем, чтобы получить уникальные фруктовые имена, вы подходите фрукты элементы, которые, случается, первый плод элемент в ключе (и, чтобы проверить два узла одинаковы используется метод генерации-идентификатор())

<xsl:apply-templates 
    select="//fruit[generate-id() = generate-id(key('fruit', .)[1])]" /> 

Вот полный XSLT-

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:key name="fruit" match="fruit" use="." /> 

    <xsl:template match="/"> 
     <xsl:apply-templates 
     select="//fruit[generate-id() = generate-id(key('fruit', .)[1])]" /> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

При нанесении на ваш образец XML, следующий выход:

<fruit>apple</fruit> 
<fruit>Orange</fruit> 
<fruit>mango</fruit> 
Смежные вопросы