如何在XSLT中为混合项目符号列表创建模板

时间:2012-03-24 00:41:23

标签: xml templates xslt

如何创建模板,以便使用以下XML ...

<content>
<bullet>text</bullet>
<bullet>more text</bullet>
o more text
o more text
o more text
<bullet>more text</bullet>
</content>

在html中看起来像这样......

<li>text</li
<li>more text</li>
o more text
o more text
o more text
<li>more text</li>

这可能很简单,但我最终还是......

text
more text
o more text
o more text
o more text
more text
<li>text</li>
<li>more text</li>
<li>more text</li>

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <!-- processes all *nodes* by copying them, 
             and can be overridden for individual 
             elements, attributes, comments, processing instructions, 
             or text nodes -->

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <!-- replace content with ul -->
    <xsl:template match="content">
        <ul>
            <xsl:apply-templates select="@*|node()"/>
        </ul>
    </xsl:template>

    <!-- replace bullet with li --> 
    <xsl:template match="bullet">
        <li>
            <xsl:apply-templates select="@*|node()"/>
        </li>
    </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:1)

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html"/>

    <xsl:template match="content">
      <ul><xsl:apply-templates/></ul>
    </xsl:template>

    <xsl:template match="bullet">
      <li><xsl:apply-templates/></li>
    </xsl:template>

</xsl:stylesheet>

答案 2 :(得分:0)

基本上你需要一个匹配所有东西的模板,然后根据输入的内容显示输出。我使用node()作为模板匹配,然后使用<xsl:when>标记来确定我是使用直接文本还是<bullet>节点的内容并进行相应显示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html"/>

<xsl:template match="node()">
  <xsl:for-each select="node()">

      <xsl:choose>
        <xsl:when test="node()">
          <li><xsl:value-of select="."/></li>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="."/>
        </xsl:otherwise>
      </xsl:choose>

  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

您可以使用此工具测试样式表:http://xslttest.appspot.com/(很遗憾,此应用没有永久链接功能)。我得到以下输出:

<li>text</li>

<li>more text</li>
o more text
o more text
o more text

<li>more text</li>