2011-10-27 17 views
6

Źródło wejściaXSLT Transformation - dynamiczne nazwy elementów

<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> 

Oczekiwany wynik:

<?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> 

Zasadniczo coraz wartość atrybutu nazwa elementu polowego i skonstruować nowy element, a następnie pobrać wartość " Wartość "atrybut i użycie go jako wartości nowego elementu.

+0

Skąd pochodzi ""? Również twój element 'Field' na twoim wejściu nie jest dobrze uformowany. –

+0

+1 za dobre pierwsze pytanie. –

Odpowiedz

13

To XSL Stylesheet:

<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> 

Applied dobrze uformowane wejście:

<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> 

Produkuje:

<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> 

Nie jestem pewien gdzie <PONumber> ma być generowany.

+0

Rozwiązanie zadziałało jak urok. Zepsułem wejście źródłowe i docelowe, próbując skopiować wklej w oknie ... nie mogę ci wystarczająco podziękować za to ... – Neel

0

Coś wzdłuż tych linii, jeśli cię rozumiem poprawnie:

<xsl:element name="name()"> 
<xsl:value-of select="./text()" /> 
</xsl:element> 
Powiązane problemy