2011-10-27 28 views
6

fuente de entradatransformación XSLT - nombres de los elementos dinámicos

<SiebelMessage MessageId="1-18J35" IntObjectName="XRX R5 Letter Instance" MessageType="Integration Object" IntObjectFormat="Siebel Hierarchical"> 
<LetterInstance Id="1-1RUYIF" Language="ENU" TemplateType="SA"> 
<Field Value="CO Last Name" Datatype="String" Name="ContractingOfficerLastName"> 
</LetterInstance> 
</SiebelMessage> 

Resultado esperado:

<?xml version="1.0" encoding="UTF-8"?> 
<SiebelMessage MessageId="1-18J35" IntObjectName="XRX R5 Letter Instance" MessageType="Integration Object" IntObjectFormat="Siebel Hierarchical"> 
<LetterInstance Id="1-1RUYIF" Language="ENU" TemplateType="SA"> 
<ContractingOfficerLastName>CO Last Name</ContractingOfficerLastName> 
<PONumber>POTest000001</PONumber> 
</LetterInstance> 
</SiebelMessage> 

conseguir Básicamente el valor del atributo Nombre de elemento de campo y construir un nuevo elemento y luego obtener el valor de " Valor "atributo y usarlo como valor de nuevo elemento.

+0

¿De dónde viene ''? Además, su elemento 'Field' en su entrada no está bien formado. –

+0

+1 para una buena primera pregunta. –

Respuesta

13

esta hoja de estilo XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Field"> 
    <xsl:element name="{@Name}"> 
     <xsl:value-of select="@Value"/> 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

Aplicada a bien formado de entrada:

<SiebelMessage MessageId="1-18J35" IntObjectName="XRX R5 Letter Instance" MessageType="Integration Object" IntObjectFormat="Siebel Hierarchical"> 
    <LetterInstance Id="1-1RUYIF" Language="ENU" TemplateType="SA"> 
    <Field Value="CO Last Name" Datatype="String" Name="ContractingOfficerLastName"/> 
    </LetterInstance> 
</SiebelMessage> 

Produce:

<SiebelMessage MessageId="1-18J35" IntObjectName="XRX R5 Letter Instance" MessageType="Integration Object" IntObjectFormat="Siebel Hierarchical"> 
    <LetterInstance Id="1-1RUYIF" Language="ENU" TemplateType="SA"> 
     <ContractingOfficerLastName>CO Last Name</ContractingOfficerLastName> 
    </LetterInstance> 
</SiebelMessage> 

No estoy seguro de donde se supone que <PONumber> a generarse a partir de.

+0

La solución funcionó a las mil maravillas. Eché a perder la fuente y la entrada de destino al intentar copiar pegar en la ventana ... no puedo agradecerte lo suficiente por esto ... – Neel

0

Algo a lo largo de estas líneas, si he entendido bien:

<xsl:element name="name()"> 
<xsl:value-of select="./text()" /> 
</xsl:element> 
Cuestiones relacionadas