xsl:if - if元素存在

时间:2012-01-19 19:51:28

标签: xml xslt

我需要在我的xslt中写一个子句,它说明一个元素是否存在显示文本节点,如果它不存在,则不显示任何内容。如果文本节点是特定单词,我可以找到如何写,但如果元素存在则不能写。

非常感谢任何建议。

PS:xslt / xml等新手

例如:XML代表一个包含页面的书。该页面的一个版本有一个标题。下面是一个包含四列和20行的表。在这下面是一个页脚。此页脚不在页面的其他版本上。我的xslt需要将xml转换为可视化表示的网页。

因此,xml的元素为<Footer>,模式中的minOccurs为0。

1 个答案:

答案 0 :(得分:4)

这可以通过省略比较来完成,例如

<xsl:if test='root/element'>

但是,最简单的方法是使用xsl:templates

因此对于xml

<?xml version="1.0" encoding="utf-8"?>
<root>
  <page>
    <title>Franks</title>
    <header>header text</header>
    <bodytext>here is the body text</bodytext>
  </page>
  <page>
    <title>Joes</title>
    <footer>footer text</footer>
    <bodytext>here is the body text2</bodytext>
  </page>
</root>

xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">

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

  <xsl:template match="page">
    <h1>
      <xsl:value-of select="title"/>
    </h1>
    <p>
      <xsl:value-of select="bodytext"/>
    </p>
    <xsl:apply-templates select="footer"/>
  </xsl:template>

  <xsl:template match="footer">
    <p>
      <xsl:value-of select="."/>
    </p>
  </xsl:template>
</xsl:stylesheet>

说明了这可以做到的方式。 有关选择的更多信息,请查看w3schools xpath tutorial