Как сделать шаблон для смешанного списка маркеров в XSLT? - PullRequest
2 голосов
/ 24 марта 2012

Как мне сделать шаблон, чтобы следующий 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 ]

1 голос
/ 24 марта 2012
<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 голос
/ 25 марта 2012
<?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>
0 голосов
/ 24 марта 2012

В основном вы хотите шаблон, который соответствует всем, а затем отображать вывод в зависимости от того, что было введено.Я использую node() в качестве совпадения шаблона, затем использую тег <xsl:when>, чтобы определить, работаю ли я с прямым текстом или содержимым узла <bullet>, и отображаю соответственно:можете использовать этот инструмент для проверки таблицы стилей: http://xslttest.appspot.com/ (к сожалению, это приложение не имеет функции постоянной ссылки).Я получаю следующий вывод:

<li>text</li>

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

<li>more text</li>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...