Слияние элементов

chameleon

Новичок
Слияние элементов

Можно ли посредством xslt из двух записей типа:
<girls>
<girl recid=1>
<name>Маша</name>
<phone>5555555</phone>
</girl>
<girl recid=1>
<name>Маша</name>
<phone>7777777</phone>
</girl>
</girls>
сделать одну типа:
<girls>
<girl recid=1>
<name>Маша</name>
<phone>5555555</phone>
<phone>7777777</phone>
</girl>
</girls>

и таким образом надо всех гёрлз проверить :)..
 

Sababa

Guest
да легко:

алгоритм такой:
1. foreach по уникальным id в &lq;girl&rq;
2. потом вытаскиваешь все телефоны для опрделенного id, типа /girls/girl[@recid = $id]/phone
 

chameleon

Новичок
Код:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<girls>	
<xsl:for-each select="/girls/girl">	
<xsl:copy-of select="./name"/>	
<xsl:variable name="id" select="./recid"/>		
<xsl:copy-of select="/girls/girl[recid=$id]/phone"/>	
</xsl:for-each>	
</girls>
</xsl:template>
</xsl:stylesheet>
вот пример сделал...почти работает :)...
только не знаю как сделать foreach _только по уникальным_ записям?
 

Sababa

Guest
легко. не проверял, но что-то типа этого:

PHP:
	<xsl:key name="recid" match="/girls/girl" use="@recid"/>
	
	<xsl:template match="/">
		<girls>
			<xsl:for-each select="/girls/girl[generate-id() = generate-id(key('recid', @recid))]">
				<girl recid="{@recid}">
					<xsl:copy-of select="./name"/>
					<xsl:copy-of select="key('recid', @recid)/phone"/>
				</girl>
			</xsl:for-each>
		</girls>
	</xsl:template>
 

chameleon

Новичок
Чем больше я узнаю, тем больше кажется что я ничего не знаю :)...спасибо огромное.
 
Сверху