Genric XSLT样式表转换xml

时间:2016-08-30 16:48:58

标签: xslt

我正在寻找一些帮助构建XSLT样式表。我提供了输入XML。我需要将它转换为显示的输出XML。

我在想......

  1. 从根节点开始
  2. 遍历树以检查属性或元素。
  3. 如果是元素,则字符串连接并格式化

    <businessElements>
                  <key>requestId</key>
                  <type>String</type>
                  <value>TV00001001</value>
     </businessElements>
    
  4. 输入XML

    <entity1>
        <requestID>TV00001001</requestID> //nested entities 
        <entity2>
          <effectiveDt>2001-12-31T12:00:00</effectiveDt> // attribute with value 
          <companyCd>companyCd</companyCd>
          < entity3>
            <vo1>
              <att1>true</ att1>
              < att2>vehicleId</att2>
              <att3>true</att3>
    
           </vo1>
          </ entity3>
    </ entity2>
    </ entity1>
    

    输出XML

    < entity1>
        <businessElements>
                      <key>requestId</key>
                      <type>String</type>
                      <value>TV00001001</value>
         </businessElements>
        < entity2>
            <businessElements>
                         <key>effectiveDt</key>
                         <type>Date</type>
                     <value>12/11/2016</value>
             </businessElements>
           <businessElements>
                         <key>companyCd</key>
                         <type>String</type>
                         <value>0001</value>
             </businessElements>
          < entity3>
            < vo1>
                   <businessElements>
                               <key>vehicleId</key>
                               <type>String</type>
                               <value>5</value>
                </businessElements>
    
            </ vo1>
          </ entity3>
    </ entity2>
    </ entity1>
    

1 个答案:

答案 0 :(得分:0)

我在输出中看不到任何可辨别的逻辑 - 特别是因为它包含输入中没有的值。

以此为出发点:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="*[not(*)]">
    <businessElements>
        <key>
            <xsl:value-of select="name()" />
        </key>
        <type>???</type>
        <value>
            <xsl:value-of select="." />
        </value>
    </businessElements>
</xsl:template>

</xsl:stylesheet>

这将获取所有叶节点(没有其他元素作为其子元素的元素)并将它们转换为businessElements节点,其中key是原始元素的名称,{{1是它的字符串值。

我不确定value值应该来自何处。

应用于以下格式良好(!)输入示例:

<强> XML

type

结果将是:

<entity1>
   <requestID>TV00001001</requestID>
    <entity2>
      <effectiveDt>2001-12-31T12:00:00</effectiveDt>
      <companyCd>companyCd</companyCd>
      <entity3>
         <vo1>
            <att1>true</att1>
            <att2>vehicleId</att2>
            <att3>true</att3>
         </vo1>
      </entity3>
   </entity2>
</entity1>