如何在XSLT中使用Muenchian方法进行分组



我是XSLT的新手,我正在使用XSLT 1.0。现在我需要将一些内容分组到一个相当大的XML文件中。有很多例子,但由于某种原因,没有一个对我有效。我能够对我想要的信息进行分组,但是在我的输出xml中也会得到一些额外的文本。这是我现在正在做的;

输入XML(这是一个临时XML,实际的输入相当大,但我将能够应用相同的我真正的XML太)

<?xml version="1.0" encoding="utf-8"?>
<objects>
  <groupNumber>15</groupNumber>
  <object>
    <items>
      <item>
        <itemOptions>
          <itemNumber>1</itemNumber>
        </itemOptions>
      </item>
      <item>
        <itemOptions>
          <itemNumber>1</itemNumber>
        </itemOptions>
      </item>
      <item>
        <itemOptions>
          <itemNumber>2</itemNumber>
        </itemOptions>
      </item>
      <item>
        <itemOptions>
          <itemNumber>3</itemNumber>
        </itemOptions>
      </item>
      <item>
        <itemOptions>
          <itemNumber>3</itemNumber>
        </itemOptions>
      </item>
    </items>
  </object>
</objects>

现在我要按itemnumber对项目进行分组。我是这样做的;

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xs xsi xsl">
  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
  <xsl:key name="itemler" match="item" use="itemOptions/itemNumber" />
  <xsl:template match="items" name="temp">
    <numbers>
    <xsl:for-each select="item[count(. | key('itemler', itemOptions/itemNumber)[1])=1]">
      <number>
        <xsl:value-of select="itemOptions/itemNumber" />
      </number>
    </xsl:for-each>
    </numbers>
  </xsl:template>
</xsl:stylesheet>
在这段代码中,我得到了这样的输出;
<?xml version="1.0" encoding="utf-8"?>
15
<numbers>
  <number>1</number>
  <number>2</number>
  <number>3</number>
</numbers>

这几乎就是我想要的,除了"15"。我得到分组的数字和一个值从标签这是在根下。

当我尝试将这个XSLT应用于我的主XML时,我得到了这个完全相同的错误,我从根下的标签和其他一些标签中得到了很多不想要的信息。这里的问题是什么?

我猜这是与模板或匹配有关的东西,但我真的不知道如何解决。

添加模板

<xsl:template match="/">
  <xsl:apply-templates select="//items"/>
</xsl:template>

确保您只处理items元素。

最新更新