XSL - Duda sobre XSLT y XML

 
Vista:

Duda sobre XSLT y XML

Publicado por Marta (1 intervención) el 15/09/2008 16:47:04
Hola a todos,

Estoy empezando con esto de .Net y XML y me encuentro con que necesito pasar de un tipo de xml a otro tipo de xml usando una hoja de estilos xslt.
El caos es que tengo que hacer la inversión y deshacerla y me he encontrado conque una de las inversiones no se como ponerlo.
Tengo este xml:

<?xml version="1.0" standalone="yes"?>
<assesmentItem>
<choiceInteraction responseIdentifier="respuestacorrecta" title="titulo1" discipline="disciplina1" dificulty="dificultad1" timexpected="tiempo" basetype="choice" cardinality="single">
<prompt>pregunta1</prompt>
<simplechoice1>respuesta1</simplechoice1>
<simplechoice2>respuesta2</simplechoice2>
<simplechoice3>respuesta3</simplechoice3>
<simplechoice4>respuesta4</simplechoice4>

</choiceInteraction>
</assesmentItem>

Y quiero ponerlo de esta otra:

<?xml version="1.0" standalone="yes"?>
<assesmentItem>

<choiceInteraction responseIdentifier="respuestacorrecta" title="titulo1" discipline="disciplina1" dificulty="dificultad1" timexpected="tiempo" basetype="choice" cardinality="single">
<prompt>pregunta1</prompt>
<simplechoice identifier="choiceA">respuesta1</simplechoice>
<simplechoice identifier="choiceB">respuesta2</simplechoice>
<simplechoice identifier="choiceC">respuesta3</simplechoice>
<simplechoice identifier="choiceD">respuesta4</simplechoice>
</choiceInteraction>

</assesmentItem>

donde si es simplechoice1 será choiceA como atributo y así con los otros.
El caso es que no se como añadirle al tag del elemento ese atributo segun tipo de elemento. En fins a ver si alguien me puede ayudar.

Muchas gracias,
Marta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Transformación de nombres de elementos y adición de atributos en XML

Publicado por Alejandro (227 intervenciones) el 06/07/2023 21:54:19
Transformación XSLT para cambiar el nombre de los elementos y agregar atributos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
  <xsl:template match="assesmentItem">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <choiceInteraction>
        <xsl:apply-templates select="choiceInteraction/@*"/>
        <xsl:apply-templates select="choiceInteraction/prompt"/>
        <xsl:apply-templates select="choiceInteraction/*[starts-with(name(), 'simplechoice')]"/>
      </choiceInteraction>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="choiceInteraction/@*">
    <xsl:copy/>
  </xsl:template>
  <xsl:template match="choiceInteraction/prompt">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="choiceInteraction/*[starts-with(name(), 'simplechoice')]">
    <simplechoice>
      <xsl:attribute name="identifier">
        <xsl:text>choice</xsl:text>
        <xsl:number count="choiceInteraction/*[starts-with(name(), 'simplechoice')]"/>
      </xsl:attribute>
      <xsl:apply-templates select="@*|node()"/>
    </simplechoice>
  </xsl:template>
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Esta hoja de estilos XSLT cambiará el nombre de los elementos `<simplechoice1>`, `<simplechoice2>`, etc., a `<simplechoice>` y agregará el atributo `identifier` correspondiente. El valor del atributo `identifier` se asigna usando el prefijo "choice" seguido de un número incremental.

Puedes usar esta transformación XSLT en tu código .NET para obtener el resultado deseado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar