2012-04-27 3 views
1

Я хочу преобразовать xml с XSLTProcessor. Everthing работает нормально, но у меня проблемы с наборами атрибутов.Как построить xsl: атрибуты для множества XML-элементов?

Мой XML выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<exportDelivery> 
<job>/* many other tags and data */</job> 
<job>/* many other tags and data */</job> 
<job>/* many other tags and data */</job> 
</exportDelivery> 

Если вы хотите использовать атрибуты в вашем новом XML вы должны использовать Attribué наборы в XSL-файле. Но атрибутные наборы должны быть определены в «голове» xsl. это означает, что вне цикла foreach для «job» -tags. После трансформации каждое задание получает одни и те же атрибуты первой работы. Что я сделал не так? Вот набор атрибутов, который я использую:

<xsl:attribute-set name="premium"> 
    <xsl:attribute name="from"> 
     <xsl:value-of select="/exportDelivery/jobAdvertisements/startDate"/> 
    </xsl:attribute> 
    <xsl:attribute name="to"> 
     <xsl:value-of select="/exportDelivery/jobAdvertisements/endDate"/> 
    </xsl:attribute> 
    </xsl:attribute-set> 

Спасибо!

ответ

1

атрибуты наборы используются в качестве сокращения для обеспечения нескольких атрибутов одновременно, поэтому вместо написания:

<xsl:attribute name="border">5</xsl:attribute> 
<xsl:attribute name="cellpadding">15</xsl:attribute> 
<xsl:attribute name="cellspacing">10</xsl:attribute> 

каждый раз, когда мы хотим указать все три сразу, один может указать атрибут-набор для сделайте это в одной строке

<xsl:attribute-set name="set_table">...</xsl:attribute-set> 

<table xsl:use-attribute-sets="set_table"> 

Эти «наборы атрибутов» могут быть определены только один раз. в вашем случае, разве вы не хотите делать что-то подобное?

<job> 
    <premium from="blaDate" to="fooDate"/> 
</job> 

если да, то я не вижу, что мешает вам вставить эти элементы в процессе трансформации:

<xsl:template match="job"> 
    <job> 
    <xsl:attribute name="from"> 
     <xsl:value-of select="/exportDelivery/jobAdvertisements/startDate"/> 
    </xsl:attribute> 
    </job> 
</xsl:template> 

может быть, вы должны объяснить немного дальше, что вы пытаетесь достичь именно

+0

да ... вы правы. я такой идиот :) THX – ESCOBAR

2

в дополнение к правильному ответу @mindlandmedia, во многих случаях можно определить как элемент и его атрибуты, используя то, что известно как «AVT» нотации:

<job from="{/exportDelivery/jobAdvertisements/startDate}"/> 
+0

ой, мне это очень нравится! и тебе спасибо! – ESCOBAR

+0

@ESCOBAR: Добро пожаловать. –

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