Дать корневому элементу новое имя - PullRequest
1 голос
/ 06 января 2012

Похоже, я никогда не перестану биться головой об этом = / И поверьте мне, я не ленивый, потому что я спрашиваю здесь.:)

Сейчас я пытаюсь дать новому файлу XML новый корневой элемент.

Так что мой вывод должен быть примерно таким.

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

Но я не могу указать на мой шаблон правильно.

простой способ Распечатывает весь мой XML-файл, даже не читая мой XSL-файл Или я получаю каждый элемент, который распечатывается.

Это то, чего я сейчас достигаю с помощью lwburk здесь на stackoverflow:)

<?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 Ответ

1 голос
/ 06 января 2012

Следующая таблица стилей дает желаемый результат:

<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:element и xsl:attribute обычно необходимы только при создании динамического контента. Также обратите внимание, что ранее у вас было два шаблона, совпадающих с одним и тем же элементом. Теперь мы сопоставляем корневой (/) и ad узлы отдельно.

...