2012-04-27 39 views
1

我想用XSLTProcessor轉換xml。 Everthing工作正常,但我得到的屬性集的問題。如何爲多個XML項目構建xsl:屬性集?

我的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> 

如果你想使用你在XSL文件使用attribue套在你的新XML屬性。但屬性集必須在xsl的「頭部」中定義。這意味着在「工作」標籤的foreach循環之外。 轉換後,每個作業都獲得第一個作業的相同屬性。我錯了什麼?這裏是我使用的一套配件:

<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 2012-04-27 11:45:43

2

除了@mindlandmedia的正確答案,在很多情況下,可以同時指定一個元素,它的屬性,使用被稱爲「AVT」符號

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

哦,我非常喜歡這個!也謝謝你! – ESCOBAR 2012-04-27 11:54:10

+0

@ESCOBAR:不客氣。 – 2012-04-27 12:17:46