2012-01-06 3 views
1

がいるようです。:)与えるルート要素の新しい名前

私は今、何をしようとしています私は自分のXMLファイルに新しいルート要素を与えたいと思っています。

私の出力は次のようになります。

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

しかし、私は正しくテンプレートを指摘するようです。

ether way私のXMLファイルを印刷します。私のXSLファイルも読んでいません。 または、すべての要素が印刷されます。

これは私がstackoverflowの上、ここ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は通常、動的コンテンツを作成する場合にのみ必要です。また、以前は同じ要素に完全に一致する2つのテンプレートがありました。ルート(/)とadのノードを別々に照合しています。

+0

あなたが正しいです、私はいくつかのコードとその作業だけでテストしましたが、あなたがその要素をハードコードするときに、よりクリーンなと同じように、私は古いタスクのいくつかに戻り、それらを書き直します。 もう一度ありがとうございます。 – Dymond

関連する問題