xml - XSLT 转换 - 动态元素名称

标签 xml xslt dynamic

源输入

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

相关文章:

android - 使用 dp 会处理物理屏幕尺寸吗?

java - 使用 xslt 替换根节点的 xmlns 属性

xslt - 通过 XSLT 根据源 XML 中特定元素的连续出现向 XML 添加属性

javascript - 具有动态子组件的 ReactJS 布局组件

ios - 使用 NSXMLParser 解析复杂的 XML 结构

ios - 在 swift 中检查 xml 元素是否为空的 EXC_BAD_INSTRUCTION 错误

xml - 使用XSLT将XML转换为CSV

c++ - 如何查找不带 "111"的 0 和 1 序列的数量

c# - CacheItemUpdateCallback 中的 HttpContext.Current Null

asp.net - 使用哪一个?数据库中的 EAV 或 Blob?