Использовать list-Element в XSLT - PullRequest
       1

Использовать list-Element в XSLT

0 голосов
/ 19 сентября 2018

Итак, ниже вы можете увидеть мой данный XML.Я сопоставил шаблон, и я уже в Студенческом узле (xsl: template match = "Class / Student"):

<Class>
    <Heading>This is a sentence.</Heading>
    <Student>Alex</Student>
    <Student>Emilia</Student>
    <Student>John</Student>
</Class>

Теперь мне нужно получить список всех Студентов и того, что я хочуget должен выглядеть следующим образом:

<ul>
    <li>Alex</li>
    <li>Emilia</li>
    <li>John</li>
</ul>

Я думаю, что у меня есть ошибка в том, как я думаю, потому что мой XSLT выглядит сейчас так:

<xsl:template match="Class/Student">
    <ul>
        <xsl:for-each select="../Student">
            <li>
                <xsl:apply-templates/>
            </li>
        </xsl:for-each>
    </ul>
</xsl:template>

Но что яна самом деле получаем:

<ul>
    <li>Alex</li>
    <li>Emilia</li>
    <li>John</li>
<ul>
<ul>
    <li>Alex</li>
    <li>Emilia</li>
    <li>John</li>
<ul>
<ul>
    <li>Alex</li>
    <li>Emilia</li>
    <li>John</li>
<ul>

Я думаю, что проблема заключается в том, что я использую для каждого, но я понятия не имею, что еще я должен делать в этом случае.Надеюсь, вы, ребята, можете мне помочь:)

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Поскольку вы уже сделали шаг для использования сопоставления шаблонов с template match="Class/Student", я бы предложил придерживаться этого подхода и просто написать два шаблона, один для элементов Class, другой для элементов Student

  <xsl:template match="Class">
      <ul>
          <xsl:apply-templates select="Student"/>
      </ul>
  </xsl:template>

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

Для более сложных случаев это приводит к более чистому и более модульному коду.

0 голосов
/ 19 сентября 2018

Вы хотите один ul на Class, а не на Student, поэтому измените

<xsl:template match="Class/Student">

на

<xsl:template match="Class">

Затем измените

    <xsl:for-each select="../Student">
*От 1012 * до
    <xsl:for-each select="Student">

для получения одного li на Student дочерний элемент текущего узла Class.

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