如何使用XSL检查XML文件中是否存在属性

时间:2010-11-10 16:29:43

标签: xml xslt xpath

在运行时,我可以有两种格式的XML文件:

  1. <root>
        <diagram> 
            <graph color= "#ff00ff">    
                <xaxis>1 2 3 12 312 3123 1231 23 </xaxis>
                <yaxis>1 2 3 12 312 3123 1231 23 </yaxis>
            </graph>  
        </diagram> 
    </root>
    
  2. <root>
        <diagram> 
            <graph>    
                <xaxis>1 2 3 12 312 3123 1231 23 </xaxis>
                <yaxis>1 2 3 12 312 3123 1231 23 </yaxis>
            </graph>  
        </diagram> 
    </root>
    
  3. 取决于颜色属性的存在 我必须处理xaxis和yaxis的值。

    我需要使用XSL来做到这一点。 任何人都可以帮我暗示我可以检查这些条件的片段。

    我尝试使用

    <xsl: when test="graph[1]/@color">
         //some processing here using graph[1]/@color values
    </xsl:when>
    

    我收到了错误...

4 个答案:

答案 0 :(得分:32)

答案 1 :(得分:17)

在一个匹配项中自定义模板

<xsl:template match="diagram/graph">
  <xsl:choose>
    <xsl:when test="@color">
         Do the Task
    </xsl:when>
    <xsl:otherwise>
         Do the Task
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>**

答案 2 :(得分:4)

<xsl:when test="graph[1]/@color">
     //some processing here using graph[1]/@color values
</xsl:when>

我将在这里猜测,因为您的问题缺少很多重要信息,例如<xsl:when...出现的上下文。如果您的评论正确,您要执行的是处理graph[1]/xaxis.../yaxis,而不是graph[1]/@color值。

答案 3 :(得分:1)

我不明白 - 除了使用apply-templates进行一些轻微的语法调整之外:

<xsl:template match="graph[1][@color]">
  <!-- your processing here -->
</xsl:template>

在不知道你真正想做什么的情况下,我们无法告诉你。