2013-11-20 13 views
-3

Может ли кто-нибудь помочь? У меня есть следующий XML:Извлечь все значения атрибутов с помощью XSLT

<root> 
<tag1 attr="something1"> 
    <tag21 attr="something21"></tag21> 
    <tag321 attr="something321"></tag321> 
</tag1> 
<tag144 attr="something15"> 
    <tag21 attr="something215"></tag21> 
    <tag321 attr="something32156"></tag321> 
</tag144> 
</root> 

Основном я должен был бы написать все значения ATTR в новом формате XML, как:

something1 
somethin21 
something321 
something15 
something215 
something 32156 

я попробовал все, но не может заставить его работать, как я должен был бы. Также обратите внимание, что attr может отображаться везде в XML (а не только в структуре XML и узлах выше).

Спасибо за вашу помощь, Eoglasi

+0

выберите = «// @ *» должен сделать это –

ответ

2

Это будет делать это:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="//@attr" /> 
    </xsl:template> 

    <xsl:template match="@attr"> 
    <xsl:value-of select="concat(., '&#xA;')"/> 
    </xsl:template> 

</xsl:stylesheet> 

При запуске на своем входе пробы, результат:

something1 
something21 
something321 
something15 
something215 
something32156 

Вот XSLT который использует группировку только для отображения отдельных значений.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:key name="kAttr" match="@attr" use="." /> 

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

    <xsl:template match="@attr"> 
    <xsl:value-of select="concat(., '&#xA;')"/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Это хороший ответ, но теперь я узнал, что у меня есть повторяющиеся значения. Можно ли это сделать, как указано выше, но чтобы удалить также повторяющиеся значения, чтобы в результате получилось только одно уникальное значение? Спасибо за помощь, Eoglasi – eoglasi

+0

@eoglasi Я знаю, что это старый вопрос, но я только что заметил ваш комментарий. Я добавил выше XSLT, который показывает только уникальные значения. – JLRishe

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