我很难写一个XSLT去除额外的roes和重复的节点。所以需要你的帮助。
我的XML如下所示:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Rowsets CachedTime="" DateCreated="2015-05-05T19:27:06" EndDate="2015-05-05T19:27:06" StartDate="2015-05-05T18:27:06" Version="14.0.0 Build(802)">
<Rowset>
<Columns>
<Column Description="DateTime" MaxRange="0" MinRange="0" Name="DateTime" SQLDataType="93" SourceColumn="DateTime"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LI132.PV" SQLDataType="6" SourceColumn="10LI132.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LQ132.PV" SQLDataType="6" SourceColumn="10LQ132.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10TI112.PV" SQLDataType="6" SourceColumn="10TI112.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LI135.PV" SQLDataType="6" SourceColumn="10LI135.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LQ132.PV" SQLDataType="6" SourceColumn="10LQ132.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LI127.PV" SQLDataType="6" SourceColumn="10LI127.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10TI112.PV" SQLDataType="6" SourceColumn="10TI112.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LQ127.PV" SQLDataType="6" SourceColumn="10LQ127.PV"/>
</Columns>
<Row>
<DateTime>2015-05-05T18:27:06</DateTime>
<A>55465.359375</A>
<B>1808040</B>
<C>-331.424926757812</C>
<D>-74553.75</D>
<B>1808040</B>
<F>-10100.994140625</F>
<C>-331.424926757812</C>
<G>-445363.5625</G>
</Row>
<Row>
<DateTime>2015-05-05T18:27:06</DateTime>
<A>NA</A>
<B>NA</B>
<C>NA</C>
<D>NA</D>
<B>1808040</B>
<F>NA</F>
<C>NA</C>
<G>NA</G>
</Row>
<Row>
<DateTime>2015-05-05T18:27:06</DateTime>
<A>NA</A>
<B>NA</B>
<C>NA</C>
<D>NA</D>
<B>NA</B>
<F>NA</F>
<C>-331.424926757812</C>
<G>NA</G>
</Row>
</Rowset>
</Rowsets>
我希望我的结果XML如下:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Rowsets CachedTime="" DateCreated="2015-05-05T19:27:06" EndDate="2015-05-05T19:27:06" StartDate="2015-05-05T18:27:06" Version="14.0.0 Build(802)">
<Rowset>
<Columns>
<Column Description="DateTime" MaxRange="0" MinRange="0" Name="DateTime" SQLDataType="93" SourceColumn="DateTime"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LI132.PV" SQLDataType="6" SourceColumn="10LI132.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LQ132.PV" SQLDataType="6" SourceColumn="10LQ132.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10TI112.PV" SQLDataType="6" SourceColumn="10TI112.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LI135.PV" SQLDataType="6" SourceColumn="10LI135.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LQ132.PV" SQLDataType="6" SourceColumn="10LQ132.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LI127.PV" SQLDataType="6" SourceColumn="10LI127.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10TI112.PV" SQLDataType="6" SourceColumn="10TI112.PV"/>
<Column Description="" MaxRange="0" MinRange="0" Name="_10LQ127.PV" SQLDataType="6" SourceColumn="10LQ127.PV"/>
</Columns>
<Row>
<DateTime>2015-05-05T18:27:06</DateTime>
<A>55465.359375</A>
<B>1808040</B>
<C>-331.424926757812</C>
<D>-74553.75</D>
<F>-10100.994140625</F>
<G>-445363.5625</G>
</Row>
</Rowset>
</Rowsets>
请注意,节点,ets是动态生成的,因此无法在XSLT中对其进行硬编码。
如果您有任何想法可以解决我的问题,请告诉我。
提前致谢。
答案 0 :(得分:2)
此问题的一个简单解决方案是查看前面有Row
的{{1}},并查看前面有一个名称相同的元素。有了这些 - 什么都不做:
Row
所有其他元素都按原样复制。
答案 1 :(得分:1)
你使用xslt 2.0吗?如果是这样,请参阅下面的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Rowset/Row[1]">
<xsl:copy>
<xsl:for-each-group select="*" group-by=".">
<xsl:copy-of select="current-group( )[1]"/>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="//Row[preceding-sibling::Row]"/>
</xsl:stylesheet>