2010-02-04 113 views
1

我在触发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

+0

您的代码示例适用于我,打印“2010年2月”和“2010年1月”。 – Tomalak 2010-02-04 12:40:58

+0

真奇怪,我得到的每一个元素,而不是(二月测试没有,并且一月份测试对二月)... – 2010-02-04 13:33:47

+1

我没有看到任何问题,你的样式表片段,但如果你有东西不按预期工作,那么它是更好提供最少但完整的样本,让其他人重现问题。你真的有一个片段发布为你的输入?整个样式表如何显示? – 2010-02-04 13:49:49

回答

1

“有型文件前面任同级用数据属性等于当前节点的数据属性?”,对于与XPath应该像

<xsl:if test="not(preceding-sibling::Doc[@Data = current()/@Data])"> 
相关问题