XSL: выделение всего текста в узле, кроме узлов определенного типа - PullRequest
1 голос
/ 20 мая 2009

Как вывести весь текст в узле, включая текст в его дочерних узлах, исключая при этом текст в узлах "a"?

Ответы [ 4 ]

8 голосов
/ 21 мая 2009

Используйте встроенное шаблонное правило для текстовых узлов, которое должно копировать их в результат. Даже для указанного вами нового режима обработки («все-но-а» в приведенном ниже коде) встроенные правила будут работать: для элементов (рекурсивно) обрабатываются дочерние элементы; для текстовых узлов скопируйте. Вам нужно только переопределить один из них, правило для <a> элементов, отсюда и правило пустого шаблона, которое эффективно удаляет текст.

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

  <xsl:template match="myNode">
    <!-- Process children -->
    <xsl:apply-templates mode="all-but-a"/>
  </xsl:template>

          <!-- Don't process <a> elements -->
          <xsl:template mode="all-but-a" match="a"/>

</xsl:stylesheet>

Чтобы получить полное описание того, как работают встроенные правила шаблонов, ознакомьтесь с разделом «1006 *« Как работает XSLT »на моем веб-сайте в разделе« Правила встроенного шаблона ».

3 голосов
/ 20 мая 2009

, если вы сейчас обрабатываете свой узел.

<xsl:value-of select="."/>

должен вернуть весь текстовый контент

1 голос
/ 29 мая 2009

Я считаю, что это то, что вы ищете:

<xsl:for-each select="//text()[not(ancestor::a)]">
  <xsl:value-of select="."/>
</xsl:for-each>

Выбирает все текстовые узлы, которые не являются потомками тегов привязки.

1 голос
/ 20 мая 2009
<xsl:for-each select="//*[text() and name() != 'a']">
<xsl:value-of select="."/>
</xsl:for-each>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...