2013-07-10 5 views
0

У меня есть большой xml-файл с несколькими узлами slide, а ниже - часть моего большого xml.получить значения атрибутов, группируя узлы XSLT

<slide add_info="e" name="slide31.xml" nav_lvl_1="Contact" nav_lvl_2="Company" > 
    --------something---------- 
</slide> 
<slide add_info="a" name="slide32.xml" nav_lvl_1="References" nav_lvl_2="Company"> 
    -----something---- 
</slide> 
<slide add_info="b" name="slide33.xml" nav_lvl_1="References" nav_lvl_2="Company" > 
    ------something-------- 
</slide> 
<slide add_info="c" name="slide34.xml" nav_lvl_1="References" nav_lvl_2="Company" > 
    --------something---------- 
</slide> 
<slide add_info="d" name="slide34.xml" nav_lvl_1="Contact" nav_lvl_2="Company" > 
    --------something---------- 
</slide> 

Здесь мне нужно сгруппировать только slide узла, который имеет атрибут References и Company и получить все add_infovalues атрибута из этого nodes.For примера ожидаемого результата:

a b c 

В настоящее время я Производство:

<xsl:choose> 
    <xsl:when test="@nav_lvl_1='References'"> 
     <xsl:if test="@nav_lvl_2='Company'"> 
     <xsl:for-each select="//@add_info"> 
      <xsl:value-of select="."/> 
     </xsl:for-each> 
     </xsl:if> 
    </xsl:when> 
</xsl:choose> 

Но это дает мне all текстовое значение атрибута add_info в целом, например document.For: это дает мне:

e a b c d 

Но мне нужен выход только a b c Как мог я изменить выше xslt код для достижения этой цели .. Любой advgestions .. Я застрял здесь :(

ответ

1

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

Чтобы выбрать только один набор конструкций с определенными свойствами, просто обратиться к ним в одном XPath адресу:

<xsl:for-each select="//slide[@nav_lvl_1='References' and @nav_lvl_2='Company'"> 
    <xsl:value-of select="@add_info"/> 
</xsl:for-each> 

... хотя я бы отказаться от //slide и использовать адрес без //, чтобы получить родителям всех слайдов, а затем адресуйте слайды как дети.

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