2012-01-06 2 views
1

보인다. :)가지 적어 루트 요소의 새 이름

내가 지금 할 노력하고있어 XML 파일에 새로운 루트 요소를 제공하고 싶습니다.

그래서 내 결과는 이와 같아야합니다.

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

하지만 정확한 템플릿을 지적하는 것 같습니다.

ether way 내 XSL 파일을 읽지 않고도 내 전체 XML 파일을 인쇄합니다. 아니면 모든 요소가 출력됩니다.

이 내 XML 파일은 다음과 같이보고있다

<?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> 

I에 유래 : 여기에 lwburk에서 약간의 도움으로 순간을 달성하는 것이다.

<?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