parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Rafael 09.10.2006 12:55 / 09.10.2006 12:57

но конструкция following-sibling::/@b ошибочна
лшибочка...:
following-sibling::*/@b
итак:
xml_test1.xml:
<?xml version="1.0" encoding="windows-1251" ?>
<zzz>
	<a b="1" c="2">1</a>
	<a b="2" c="2">2</a>
	<a b="2" c="DEF">3</a>
	<a b="3" c="DEF">4</a>
	<a b="4" c="2">5</a>
</zzz>
xml_test1.xsl:
<?xml version="1.0" encoding="windows-1251" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="zzz">
	<xsl:apply-templates select="a"/>
</xsl:template>

<xsl:template match="a">
	<xsl:choose>
	<xsl:when test="@b = following-sibling::*/@b and following-sibling::*/@c = 2">
		<xsl:call-template name="print"/>
		<xsl:text> (c = 2)</xsl:text> <br/>
	</xsl:when>

	<xsl:otherwise>
		<xsl:if test="@c = 'DEF'">
			<xsl:call-template name="print"/>
			<xsl:text> (c = DEF)</xsl:text> <br/>
		</xsl:if>
	</xsl:otherwise>
	</xsl:choose>
</xsl:template>

<xsl:template name="print">
	<xsl:text>&lt;a </xsl:text>
	<xsl:text>b="</xsl:text><xsl:value-of select="@b"/>
	<xsl:text>" c="</xsl:text><xsl:value-of select="@c"/>
	<xsl:text>"/&gt;</xsl:text>
</xsl:template>
</xsl:stylesheet>
xml_test1.html:
$sourceDoc[^xdoc::load[xml_test1.xml]]

$transformedDoc[^sourceDoc.transform[xml_test1.xsl]]

^transformedDoc.string[
    $.method[html]
]
Получаем:
<a b="2" c="2"/> (c = 2)
<a b="2" c="DEF"/> (c = DEF)
<a b="3" c="DEF"/> (c = DEF)