我是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>
现在我想按itemNumbers对项目进行分组。这就是我的所作所为;
<?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时,我得到了完全相同的错误,我从root和其他标签下的标签获得了大量不需要的信息。这有什么问题?
我猜这是与模板或比赛相关的东西,但我真的不知道如何解决。
非常感谢。
答案 0 :(得分:1)
添加模板
<xsl:template match="/">
<xsl:apply-templates select="//items"/>
</xsl:template>
确保您只处理items
元素。