XSLT 转换无法获得正确数量的标记/节点

  • 本文关键字:节点 转换 XSLT xslt xslt-1.0
  • 更新时间 :
  • 英文 :


我是XSLT和XML的新手,不能正确地进行转换。使用网络上的例子,我最终要么缺少标签或节点(我不确定术语),要么它们是重复的。下面是输入和期望输出的示例。

输入:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2016-11-04T15:53:41">
<ActualKPIDay>
<XrefCode>Etobicoke</XrefCode>
<DayId>2016-11-03</DayId>
<KpiId>122</KpiId>
<Value>4418.88</Value>
</ActualKPIDay>
<ActualKPIDay>
<XrefCode>Etobicoke</XrefCode>
<DayId>2016-11-03</DayId>
<KpiId>121</KpiId>
<Value>44.35</Value>
</ActualKPIDay>
<ActualKPIDay>
<XrefCode>Whitby</XrefCode>
<DayId>2016-11-03</DayId>
<KpiId>121</KpiId>
<Value>46.75</Value>
</ActualKPIDay>
</dataroot>
所需输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ActualKPIDayImport> 
  <ActualKPIDay>
    <XrefCode>Etobicoke</XrefCode>
    <DayId>2016-11-03</DayId>
    <KpiId>122</KpiId>
    <Value>4418.88</Value>
  </ActualKPIDay>
  <ActualKPIDay>
    <XrefCode>Etobicoke</XrefCode>
    <DayId>2016-11-03</DayId>
    <KpiId>121</KpiId>
    <Value>44.35</Value>
  </ActualKPIDay>
  <ActualKPIDay>
    <XrefCode>Whitby</XrefCode>
    <DayId>2016-11-03</DayId>
    <KpiId>121</KpiId>
    <Value>46.75</Value>
  </ActualKPIDay>
</ActualKPIDayImport>

我最近的尝试导致离开"dataroot"行,并在每个记录之前和之后复制"ActualKPIDay"标签:

代码尝试:

xsl:stylesheet
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0">
 <xsl:strip-space elements="*"/>
 <xsl:output indent="yes"/>
 <xsl:template match="@* | node()" name="identity">
  <xsl:copy>
   <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="dataroot">
  <xsl:copy>
   <ActualKPIDayImport>
    <xsl:apply-templates/>
   </ActualKPIDayImport>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="ActualKPIDay">
  <ActualKPIDay>
   <xsl:call-template name="identity"/>
  </ActualKPIDay>
 </xsl:template>
</xsl:stylesheet>

输出结果:

<?xml version="1.0"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata">
<ActualKPIDayImport>
<ActualKPIDay>
<ActualKPIDay>
<XrefCode>Etobicoke</XrefCode>
<DayId>2016-11-03T00:00:00</DayId>
<KpiId>122</KpiId>
<Value>4418.88</Value>
</ActualKPIDay>
</ActualKPIDay>
<ActualKPIDay>
<ActualKPIDay>
<XrefCode>Etobicoke</XrefCode>
<DayId>2016-11-03T00:00:00</DayId>
<KpiId>121</KpiId>
<Value>44.35</Value>
</ActualKPIDay>
</ActualKPIDay>
<ActualKPIDay>
<ActualKPIDay>
<XrefCode>Georgetown</XrefCode>
<DayId>2016-11-03T00:00:00</DayId>
<KpiId>121</KpiId>
<Value>425.29</Value>
</ActualKPIDay>
</ActualKPIDay>
</ActualKPIDayImport>
</dataroot>

希望你能帮忙。

只需删除最后一个模板并取出dataroot模板的<xsl:copy>标记:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
 <xsl:strip-space elements="*"/>
 <xsl:output indent="yes"/>
 <xsl:template match="@*|node()">
   <xsl:element name="{local-name()}">
     <xsl:apply-templates select="@*|node()"/>
   </xsl:element>
 </xsl:template>
 <xsl:template match="dataroot" priority="1">  
   <ActualKPIDayImport>
    <xsl:apply-templates/>
   </ActualKPIDayImport>  
 </xsl:template>
  <xsl:template match="text()" priority="2">
    <xsl:copy/>
  </xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新