2011-10-27 29 views
6

ソース入力XSLT変換 - 動的な要素名

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

期待される成果:

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

は、基本的にフィールド要素のname属性の値を取得し、新たな要素を構築し、 "の値を取得新しい要素の値として使用します。

+0

」はどこから来たのですか?また、入力中の 'Field'要素はうまく構成されていません。 –

+0

+1良い最初の質問です。 –

答えて

13

このXSLスタイルシート:

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

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

応用整形式を入力します

が生成されます<PONumber>がから生成されることになっている場合、私はわからないんだけど

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

+0

このソリューションは魅力的に機能しました。私はウィンドウにペーストをコピーしようとしている間にソースとターゲットの入力をうんざりしていましたが...これについて十分にあなたに感謝することはできません... – Neel

0

私が正しくあなたを理解していれば、これらの線に沿って何か、:

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