---
title: "nytt xml-dokument från ett gammalt xml-dokument"
type: "forum-thread"
url: "https://www.webforum.nu/amne/xml/181147-nytt-xml-dokument-från-ett-gammalt-xml-dokument"
topic: "XML"
topic_url: "https://www.webforum.nu/amne/xml"
author: "PollyJuice"
published: "2009-11-09T16:03:01.000Z"
updated: "2009-11-09T18:38:20.000Z"
replies: 1
views: 746
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/xml/181147-nytt-xml-dokument-från-ett-gammalt-xml-dokument"
---

# nytt xml-dokument från ett gammalt xml-dokument

## #1 — PollyJuice, 2009-11-09T16:03Z

Hej,

jag har kört fast på en uppgift och skulle behöva lite tips om hur jag ska gå till väga för att lösa den.

Jag har ett xml-dokument som, lite kortfattat, ser ut såhär:

```
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="uppgift9_2.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/>
	</ad>
</autoads>
```

Uppgiften är att mha XSLT transformera detta till ett nytt XML-dokument som ser ut såhär:

```
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="uppgift9_2.xsl"?>
<motorpark>
<fordon pris="129900">
<namn>Honda</namn>
<modellTyp1>XL 1000 V</modellTyp1>
</fordon>
</motorpark>
```

Det nya XML-dokumentet ska bestå av ett rotelement med namnet motorpark. Rotelementet kan ha flera element med namnet fordon, vilka innehåller information om var och en av bilarna/motorcyklarna i XML-dokumentet. Observera att elementet PRICE i första dokumentet ska omvandlas till ett attribut till FORDON i andra dokumentet, och det ska skapas ett helt nytt element med namnet modellTypX (från elementen model och type). 

Jag testade att skriva såhär i XSLT-dokumentet:

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

<xsl:template match="/">
<motorpark>
<xsl:apply-templates select="autoads" mode="ad"/>
</motorpark>
</xsl:template>

<fordon>
<xsl:template match="ad/price" mode="copy">
<xsl:copy> 

<xsl:apply-templates select="ad/price" mode="copy"/>
<xsl:apply-templates mode="copy"/>
</xsl:copy>
</xsl:template>
	<namn></namn>

<xsl:template match="ad/type" mode="copy">
<xsl:copy> 
<modellTyp>
<xsl:apply-templates select="ad/type" mode="copy"/>
<xsl:apply-templates mode="copy"/>
</modellTyp>
</xsl:copy>
</xsl:template>
</fordon>
</xsl:stylesheet>
```

 men det är uppenbart att något är fel. Kan någon tipsa mig om var jag tänkt fel och hur jag ska göra för att skapa det nya xml-dokumentet som det ska se ut?

Permalänk: https://www.webforum.nu/p/181147

## #2 — jarvklo, 2009-11-09T18:38Z

Hmm... 

Några tips...

```
<xsl:template match="/">
```

 matchar autoads - din apply-templates kommer inte att hitta något.

```
<fordon>
<xsl:template match="ad/price" mode="copy">
```

Ordningen på dessa är knas (fundera över vilken mall som skall generera \<fordon\> - det är ett "template" och inte "stylesheet" eftersom du skall kunna hantera flera ;)
... och om det inte explicit ingår i uppgiften, behöver du inte komplicera saker och ting med mode-attribut ;)

```
<xsl:template match="ad/price" mode="copy">
```

Hmm... 
xsl:element, xsl:attribute och xsl:value-of är bra att ha när man vill omforma elementstruktuer ;)

Lycka till med uppgiften :bire

Permalänk: https://www.webforum.nu/p/2210906

---

Tråden på webben: https://www.webforum.nu/amne/xml/181147-nytt-xml-dokument-från-ett-gammalt-xml-dokument
