我正在尝试进行XSLT转换。
XML输入看起来像这样
<root>
<row>
<col1>John</col1>
<col2>2</col2>
<col3>Hello<col3>
<row>
<col1>John</col1>
<col2>3</col2>
<col3>Hello<col3>
<row>
<col1>Eddie</col1>
<col2>3</col2>
<col3>Hello<col3>
我正在转换XML数据并在Excel中打开它。我正在尝试在Excel中创建某种位置计数器。每行表示一个人的文件。有些文件跨越多行,如上所示。我想要创建的是每个文件的行位置计数器。例如,John在excel表中有两行数据。我想要一行将计数器读为“1”而另一行读为“2”。虽然,Eddie的位置计数器只会读为“1”。
我应该注意或尝试做什么?
答案 0 :(得分:0)
如果您的数据已经排序,您可能会在没有分组的情况下离开。例如,给定格式良好的测试输入:
<root>
<row>
<col1>Alpha</col1>
<col2>001</col2>
</row>
<row>
<col1>Alpha</col1>
<col2>002</col2>
</row>
<row>
<col1>Alpha</col1>
<col2>003</col2>
</row>
<row>
<col1>Bravo</col1>
<col2>004</col2>
</row>
<row>
<col1>Bravo</col1>
<col2>005</col2>
</row>
<row>
<col1>Charlie</col1>
<col2>006</col2>
</row>
<row>
<col1>Delta</col1>
<col2>007</col2>
</row>
<row>
<col1>Delta</col1>
<col2>008</col2>
</row>
<row>
<col1>Delta</col1>
<col2>009</col2>
</row>
</root>
以下样式表:
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:template match="/root">
<output>
<xsl:for-each select="row">
<xsl:copy>
<col0>
<xsl:value-of select="count(preceding-sibling::row[col1=current()/col1])+1"/>
</col0>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:for-each>
</output>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<output>
<row>
<col0>1</col0>
<col1>Alpha</col1>
<col2>001</col2>
</row>
<row>
<col0>2</col0>
<col1>Alpha</col1>
<col2>002</col2>
</row>
<row>
<col0>3</col0>
<col1>Alpha</col1>
<col2>003</col2>
</row>
<row>
<col0>1</col0>
<col1>Bravo</col1>
<col2>004</col2>
</row>
<row>
<col0>2</col0>
<col1>Bravo</col1>
<col2>005</col2>
</row>
<row>
<col0>1</col0>
<col1>Charlie</col1>
<col2>006</col2>
</row>
<row>
<col0>1</col0>
<col1>Delta</col1>
<col2>007</col2>
</row>
<row>
<col0>2</col0>
<col1>Delta</col1>
<col2>008</col2>
</row>
<row>
<col0>3</col0>
<col1>Delta</col1>
<col2>009</col2>
</row>
</output>
注意:这不是一个非常快的方法;如果你有一个非常大的数据集,你可能需要等一下。