【发布时间】:2016-11-04 20:22:58
【问题描述】:
我是 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>
希望你能帮忙。
【问题讨论】:
-
为什么不发布您的尝试以便我们修复它,而不必从头开始为您编写代码。