仅在不同的XML节点上执行某些操作
问题描述:
我在触发xsl操作时仅在不同的值上有困难。下面是我的XML文件的摘录:仅在不同的XML节点上执行某些操作
<?xml version="1.0" encoding="UTF-8" ?>
<Doc Data="February 2010">
<Title>Title 1</Title>
<Subject>Subject 1</Subject>
</Doc>
<Doc Data="January 2010">
<Title>Title 2</Title>
<Subject>Subject 2</Subject>
</Doc>
<Doc Data="January 2010">
<Title>Title 3</Title>
<Subject>Subject 3</Subject>
</Doc>
,这是我的XSL文件:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:objUtility="urn:utility"
version="1.0">
<xsl:output method="html" indent="no" encoding="ISO-8859-1"/>
<xsl:template match="Doc">
<xsl:if test="not(@Data = preceding-sibling::Doc/@Data)">
<xsl:value-of select="@Data" />
</xsl:if>
</xsl:template>
<xsl:apply-templates />
的问题是,这种代码的前同辈::文件/ @数据总是元素只包含第一个元素,所以基本上我只能得到一个明显的价值,而不是一月份。我错在哪里?如果你要问我必须使用XSL 1.0
答
“有型文件前面任同级用数据属性等于当前节点的数据属性?”,对于与XPath应该像
<xsl:if test="not(preceding-sibling::Doc[@Data = current()/@Data])">
您的代码示例适用于我,打印“2010年2月”和“2010年1月”。 – Tomalak 2010-02-04 12:40:58
真奇怪,我得到的每一个元素,而不是(二月测试没有,并且一月份测试对二月)... – 2010-02-04 13:33:47
我没有看到任何问题,你的样式表片段,但如果你有东西不按预期工作,那么它是更好提供最少但完整的样本,让其他人重现问题。你真的有一个片段发布为你的输入?整个样式表如何显示? – 2010-02-04 13:49:49