2012-01-06 65 views
1

好像我從來沒有停止敲我的頭,這=/ 請相信我,我不懶,因爲我問這裏。:)給根元素的新名稱

我試圖盡現是我想給我的XML文件一個新的根元素。

所以我的輸出應該是這樣的。

<motorpark> 
<fordon pris="129900"><name>Honda</name><modellTyp1/></fordon> 
    <fordon pris="119000"><name>Nissan</name><modellTyp2/></fordon> 
</motorpark> 

但我似乎無法指出我的模板正確。

以方式它打印出我的整個XML文件,甚至沒有讀取我的XSL文件 或者我得到打印出來的每個元素。

這是我完成的那一刻有一定的幫助,從lwburk這裏計算器:)

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="ad"> 
<xsl:element name="motorpark"> 
<xsl:apply-templates select="autoads" mode="ad"/> 
</xsl:element> 
</xsl:template> 
<xsl:template match="ad"> 
<xsl:element name="fordon"> 
<xsl:attribute name="pris"> 
<xsl:copy-of select="price" /> 
</xsl:attribute> 
<xsl:copy-of select="name"/> 
<xsl:element name="{concat('modellTyp', type)}"> 
</xsl:element> 
</xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

我的XML文件看起來像這樣。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="uppgift2.xsl"?> 
<autoads> 
    <ad> 
     <type>1</type> 
     <name>Honda</name> 
     <model>XL 1000 V</model> 
     <regyear>2001</regyear> 
     <price>129900</price> 
     <adtext>2001 Honda XL 1000 V, 8.900 km. hög vindruta. Pris 129.900kr,-. </adtext> 
     <addate>20020115</addate> 
     <volume>1000</volume> 
     <category></category> 
    </ad> 
    <ad> 
     <type>2</type> 
     <name>Nissan</name> 
     <model>Almera 1.4S</model> 
     <regyear>1997</regyear> 
     <price>119000</price> 
     <adtext>1997 Nissan Almera 1.4S, 5 dörrar, met, 70.000 km. el.spegel/fönster, galv. kaross, c.lås, startspärr, airbag, nedfällb. baks. ABS, ute temp. R/CD, alarm, d.fäste, v.säten, s/v-hj. EU-godk. full service, servo. Pris 119.000 kr,-. </adtext> 
     <addate>20020118</addate> 
     <volume>0</volume> 
     <category>5 dörrar</category> 
    </ad> 
</autoads> 

回答

1

以下樣式表產生所需的結果:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <motorpark> 
      <xsl:apply-templates/> 
     </motorpark> 
    </xsl:template> 
    <xsl:template match="ad"> 
     <fordon pris="{price}"> 
      <xsl:copy-of select="name"/> 
      <xsl:element name="{concat('modellTyp', type)}"/> 
     </fordon> 
    </xsl:template> 
</xsl:stylesheet> 

注意,樣式表的大小可以通過硬編碼元件大大降低和屬性名稱時,他們事先要已知的。 xsl:elementxsl:attribute通常只在生成動態內容時需要。另外請注意,您之前有兩個模板完全匹配相同的元素。我們現在分別匹配根節點(/)和ad節點。

+0

你說得對,我只是對一些代碼和它的工作進行了測試,但就像你說的那樣,當你對這些元素進行硬編碼時它更清晰,我將回到我的一些舊任務並重寫它們。 再次感謝您。 – Dymond 2012-01-06 03:37:37