Разделенная строка XSL с использованием пустых элементов - PullRequest
1 голос
/ 13 мая 2010

Допустим, у меня есть строка в файле XML, подобная следующей (полученной из файла HTML):

<i>This is a nice poem<br/>It doesn't rhyme<br/>because right now<br/>I don't have time</i>

Я пытаюсь исправить XSLT, чтобы разделить эту строку следующим выводом:

<stanza>
    <line>This is a nice poem</line>
    <line>It doesn't rhyme</line>
    <line>because right now</line>
    <line>I don't have time</line>
</stanza>

Я нашел множество примеров того, как разделить это, если он был ограничен каким-то текстом, но, поскольку он был ограничен реальным тегом элемента, я действительно застрял. У кого-нибудь есть мысли?

1 Ответ

3 голосов
/ 13 мая 2010

Нет необходимости разбивать. У вас есть ряд узлов, которые являются потомками <i>, некоторые из них (текстовые узлы) вас интересуют, а некоторые нет (<br> узлы).

<!-- <i> turns into <stanza> -->
<xsl:template match="i">
  <stanza>
    <xsl:apply-templates select="text()" />
  </stanza>
</xsl:template>

<!-- text nodes within <i> turn into <line> nodes -->
<xsl:template match="i/text()" />
  <line><xsl:value-of select="." /></line>
</xsl:template>

Узлы <br> не отображаются в выходных данных, поскольку вы не обрабатываете их - вы применяете шаблоны только к текстовым узлам (обратите внимание, что text() выбирает текстовые узлы).

<br> по-прежнему выполняет важную функцию - они являются теми, которые разграничивают ваши текстовые узлы, эффективно выполняя «разделение» за вас.

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