Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / XML, XSL, XPath, XQuery Новый топик    Ответить
 как получить в шаблоне значение родительского элемента  [new]
LeoArslan
Member

Откуда:
Сообщений: 13
Добрый день. Прошу помощи гуру
имеем xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<main_list>
<item_main_list>
	<id>id_1</id>
	<sub_list>
		<item_sub_list><val>val_sublist_1_1</val></item_sub_list>
		<item_sub_list><val>val_sublist_1_2</val></item_sub_list>
	</sub_list>
</item_main_list>
<item_main_list>
	<id>id_2</id>
	<sub_list>
		<item_sub_list><val>val_sublist_2_1</val></item_sub_list>
	</sub_list>
</item_main_list>
</main_list>
</root>


и xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">    
<xsl:template match="root">        
	<root>            
		<table>                
			<rows>               
				<xsl:apply-templates select="main_list/item_main_list/sub_list/item_sub_list">
					<xsl:with-param name="paramId" select="main_list/item_main_list/id" />               
				</xsl:apply-templates>            
				</rows>         
		</table>            
	</root>    
</xsl:template>	    
	  
	<xsl:template match="main_list/item_main_list/sub_list/item_sub_list">        
		<xsl:param name="paramId" />      
		<row>            
			<row_id><xsl:value-of select="$paramId" /> </row_id>
			<row_value> <xsl:value-of select="val" /> </row_value>						
		</row>    
	</xsl:template>	    
</xsl:stylesheet>


на выходе получаем
<?xml version="1.0"?>
<root>
<table>
<rows>
<row><row_id>id_1</row_id><row_value>val_sublist_1_1</row_value></row>
<row><row_id>id_1</row_id><row_value>val_sublist_1_2</row_value></row>
<row><row_id>id_1</row_id><row_value>val_sublist_2_1</row_value></row>
</rows></table></root>

почему в последний строке row_id = id_1, а не id_2 (у родительского элемент). Что делаю не так и что поправить?
3 сен 18, 18:42    [21663036]     Ответить | Цитировать Сообщить модератору
 Re: как получить в шаблоне значение родительского элемента  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11256
LeoArslan
Что делаю не так
Выбираете всегда первый элемент
LeoArslan
что поправить?
Выбирать относительно текущего узла
<xsl:apply-templates select="main_list/item_main_list/sub_list/item_sub_list"/>
.....
<xsl:template match="main_list/item_main_list/sub_list/item_sub_list">        
  <row>            
    <row_id><xsl:value-of select="../id"/> </row_id>
    <row_value> <xsl:value-of select="val" /> </row_value>						
  </row>    
</xsl:template>	    
3 сен 18, 19:01    [21663050]     Ответить | Цитировать Сообщить модератору
 Re: как получить в шаблоне значение родительского элемента  [new]
LeoArslan
Member

Откуда:
Сообщений: 13
_Vasilisk_,
>Выбирать относительно текущего узла
К сожалению в предложенном вами решении row_id пусто.

>Выбираете всегда первый элемент
А почему всегда первый? разве with-param не должен передавать в качестве параметра значение текущего элемента
4 сен 18, 10:21    [21663526]     Ответить | Цитировать Сообщить модератору
 Re: как получить в шаблоне значение родительского элемента  [new]
LeoArslan
Member

Откуда:
Сообщений: 13
[quot LeoArslan]_Vasilisk_,
>Выбирать относительно текущего узла
К сожалению в предложенном вами решении row_id пусто.

разобрался, надо в вшаем примере поправить ../../id, но для понимания все равно хотелось бы понять почему передается первый элемент
4 сен 18, 10:33    [21663564]     Ответить | Цитировать Сообщить модератору
 Re: как получить в шаблоне значение родительского элемента  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11256
LeoArslan
разве with-param не должен передавать в качестве параметра значение текущего элемента
Он должен передавать то значение, которое вы указываете.

Текущий узел на момент вызова with-param у вас /root Текущий контекст изменяется внутри <xsl:template> вызванного через <xsl:apply-templates>, внутри <xsl:for-each> и внутри любого атрибута select
4 сен 18, 13:14    [21663887]     Ответить | Цитировать Сообщить модератору
 Re: как получить в шаблоне значение родительского элемента  [new]
LeoArslan
Member

Откуда:
Сообщений: 13
_Vasilisk_, Спасибо
4 сен 18, 15:25    [21664182]     Ответить | Цитировать Сообщить модератору
Все форумы / XML, XSL, XPath, XQuery Ответить