源输入
<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>
基本上获取 Field 元素的 Name 属性的值并构造一个新元素,然后获取“Value”属性的值并将其用作新元素的值。
最佳答案
此 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>
应用于格式正确的输入:
<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>
产生:
<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>
我不确定在哪里<PONumber>
应该是从中生成的。
关于xml - XSLT 转换 - 动态元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7921977/