2013-09-22 2 views
0

Я хочу показать <modelnumber> на основе описания каждой модели. мой контекстный узел - это корневой уровень.Xpath для узла первого появления в повторном узле следующего узла

<covergrp> 
    <producttype>A</producttype> 
    <model_description>abc</model_description> 
    <modelnumber>7621</modelnumber> 
    <modelnumber>7622</modelnumber> 
    <producttype>B</producttype> 
    <model_description>XYZ</model_description> 
    <modelnumber>7624</modelnumber> 
    <modelnumber>7625</modelnumber> 
    <producttype>C</producttype> 
    <model_description>RBC</model_description> 
    <modelnumber>7629</modelnumber> 
    <modelnumber>7620</modelnumber> 
</covergrp> 

ответ

1

Ниже приведен пример, который использует ключ для ссылки на modelnumber элементов следуя за model_description элемента:

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

<xsl:output method="text"/>  

<xsl:key name="desc" match="modelnumber" use="generate-id(preceding-sibling::model_description[1])"/> 

<xsl:template match="covergrp"> 
    <xsl:apply-templates select="model_description"/> 
</xsl:template> 

<xsl:template match="model_description"> 
    <xsl:value-of select="."/> 
    <xsl:text>: </xsl:text> 
    <xsl:apply-templates select="key('desc', generate-id())"/> 
    <xsl:text>&#10;</xsl:text> 
</xsl:template> 

<xsl:template match="modelnumber"> 
    <xsl:if test="position() > 1">, </xsl:if> 
    <xsl:value-of select="."/> 
</xsl:template> 

</xsl:stylesheet> 

Для вашего ввода образца выхода

abc: 7621, 7622 
XYZ: 7624, 7625 
RBC: 7629, 7620 

Я выбрал текст но, конечно, один и тот же подход к группировке мог бы применяться с другими методами вывода, такими как html или xml.

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