2013-03-07 2 views
-1

Я новичок в XSLT. У меня есть следующий xml и интересно, как мы можем использовать XSLT для циклического прохождения через каждый элемент A, чтобы получить их значение. Кроме того, для каждого элемента, если позиция mod 3 = 2, получите значение этого элемента и его следующее значение элемента. Например, потому что 02 mod 3 = 2, получите значения 22 и 2.5 и т. Д.Петля через подэлементы различного имени внутри узла с использованием XSLT

Любая помощь приветствуется.

спасибо.

<A> 
<A01>abc</A01> 
<A02>22</A02> 
<A03>2.5</A03> 
<A04>0</A04> 
<A05>2</A05> 
<A06>1.8</A06> 
<A07>2</A07> 
<A08>3</A08> 
<A09>1.9</A09> 
</A> 
<A> 
<A01>abb</A01> 
<A02>22</A02> 
<A03>1.5</A03> 
<A04/> 
</A> 

Я хотел бы результаты выглядеть следующим образом:

 
abc|22|2.5|0 
abc|2|1.8|2 
abc|3|1.9| 
abb|22|1.5| 
+1

Что вы хотите, чтобы ваш выход выглядеть? –

+0

Я хочу, чтобы результаты выглядели так: abc | 22 | 2.5 | 0 abc | 2 | 1.8 | 2 abc | 3 | 19.9 | –

ответ

0

От выхода вы описываете это выглядит, как вы хотите, чтобы генерировать строки, столбцы которой являются дети 1, п, п + 1, п +2 для всех п, что п по модулю 3 = 2.

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

    <xsl:template match="/"> 
    <xsl:apply-templates select="*/A/*[(position() mod 3) = 2]"/> 
    </xsl:template> 

    <xsl:template match="*"> 
    <xsl:value-of select="concat(../*[1],'|', ., '|', 
     following-sibling::*[1], '|', following-sibling::*[2], 
     '&#10;')"/> 
    </xsl:template> 
</xsl:stylesheet> 

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

<root> 
<A> 
<A01>abc</A01> 
<A02>22</A02> 
<A03>2.5</A03> 
<A04>0</A04> 
<A05>2</A05> 
<A06>1.8</A06> 
<A07>2</A07> 
<A08>3</A08> 
<A09>1.9</A09> 
</A> 
<A> 
<A01>abb</A01> 
<A02>22</A02> 
<A03>1.5</A03> 
<A04/> 
</A> 
</root> 

таблица стилей дает правильный результат

abc|22|2.5|0 
abc|2|1.8|2 
abc|3|1.9| 
abb|22|1.5| 
+0

Спасибо. Это именно то, что я ищу :) –

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