通过XSL连接XML的同一节点的两个或多个属性

时间:2012-09-21 06:10:29

标签: xml xslt

通过XSL Transformation将XML转换为XML我想要连接多个属性,如:

示例案例:

<Sample>
  <Date Year="2012" Month="9" Day="21"/>
  <Time Hour="6" Minute="6" Second="6"/>
</Sample>

必需输出:

<Sample>
  <Date>9/21/2012</Date>
  <Time>6:6:6</Time>
</Sample>

1 个答案:

答案 0 :(得分:2)

这可以通过使用额外模板扩展标准XSLT身份转换以匹配日期时间元素,根据需要重新格式化来实现

例如,要匹配日期元素,属性,您需要这样做。

          

如果您可以保证所有日期元素都具有所需的三个属性,则可以将模板匹配简化为

<xsl:template match="Date">

您可以为时间元素添加类似的模板。

这是完整的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>
   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="Date[@Year][@Month][@Day]">
      <Date><xsl:value-of select="concat(@Month, '/', @Day, '/', @Year)" /></Date>
   </xsl:template>

   <xsl:template match="Time[@Hour][@Minute][@Second]">
      <Time><xsl:value-of select="concat(@Hour, ':', @Minute, ':', @Second)" /></Time>
   </xsl:template>
</xsl:stylesheet>

当应用于您的示例XML时,输出以下内容:

<Sample>
   <Date>9/21/2012</Date>
   <Time>6:6:6</Time>
</Sample>