【问题标题】:XSLT Transformation - dynamic element namesXSLT 转换 - 动态元素名称
【发布时间】:2011-10-27 20:30:30
【问题描述】:

源输入

<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”属性的值并将其用作新元素的值。

【问题讨论】:

  • &lt;PONumber&gt; 来自哪里?此外,您输入中的 Field 元素格式不正确。

标签: xml xslt dynamic


【解决方案1】:

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

我不确定应该从哪里生成 &lt;PONumber&gt;

【讨论】:

  • 这个解决方案就像一个魅力。我在尝试在窗口中复制粘贴时弄乱了源和目标输入...对此表示感谢...
【解决方案2】:

如果我理解正确的话,大致如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多