Avatar billede tuvix Nybegynder
04. april 2006 - 11:13 Der er 3 kommentarer og
1 løsning

Overføre nodes værdi til attribut på parent node

Jeg forsøger at lave en xslt der overføre værdier fra en node til en attribut på dens parent. Eksempelvis skal følgende:

<root>
    <node1>
        <node2>value</node2>
    </node1>
</root>

komme til at lige dette:

<root>
    <node1 attrib="value">
        <node2></node2>
    </node1>
</root>

Jeg ved bare ikke rigtig hvor jeg skal begynde og om det i det hele taget er muligt i xslt. Antallet af niveaur kan variere fra xml til xml, men værdien af en node skal altid overføres til en attribut på dens parent.
Avatar billede Slettet bruger
04. april 2006 - 23:22 #1
XSLT er specialdesignet til opgaver som denne - men der er lige et par "caveats":

1. En attribut kan ikke indeholde en CDATA-section (<![CDATA[ ... ]]>) så der skal der evt. tages højde for nogle konverteringer, hvis der er sådanne i source XML filen.

2. Hvad skal attributten hedde - det samme som elementet den erstatter? (Og hvorfor så ikke bare skille sig helt af med elementet?)

- Hvis det ikke er en generel problemstilling, men bare en enkelt konvertering hvor du kender alle inputs der kan komme fremover, er deet ikke noget problem at lave et "konverterings" XSLT stylesheet.

/CS
Avatar billede smirnoff Nybegynder
05. april 2006 - 21:53 #2
dette vil gøre præcis det du ønsker med udgangspunkt i din ovenstående xml:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   
    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no" />
   
    <xsl:template match="/">
        <root>
        <xsl:for-each select="//node1">
            <node1 attrib="{node2}">
                <node2></node2>
            </node1>       
        </xsl:for-each>       
        </root>
    </xsl:template>
   
</xsl:stylesheet>

... men jeg må gi' graystate ret --- hvorfor beholde <node2> ?!?! dette script tager højde for x-antal <node1> .. håber det hjælper dig videre
Avatar billede tuvix Nybegynder
06. april 2006 - 10:25 #3
Jeg har selv lige fundet en anden løsning på problemet, hvor jeg ikke bruger stylesheets, men i stedet en funktion jeg har lavet i C#, men ellers mange tak for foreslagene.
Avatar billede tuvix Nybegynder
18. april 2006 - 19:59 #4
Jeg lukker spørgsmålet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester