Освоение XSLT 2.0: комплексное руководство по замене всех вхождений

XSLT (преобразования расширяемого языка таблиц стилей) — мощный язык, используемый для преобразования XML-документов в различные форматы. В этой статье мы рассмотрим различные методы замены всех вхождений определенного элемента или значения в XML-документе с помощью XSLT 2.0. Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять и эффективно их реализовать.

Метод 1: использование функции replace()
Функция replace() в XSLT 2.0 позволяет заменять все вхождения определенной строки другой строкой. Вот пример, демонстрирующий использование функции replace():

<xsl:template match="/">
  <xsl:variable name="input" select="'Hello, World! Hello, OpenAI!'"/>
  <xsl:value-of select="replace($input, 'Hello', 'Hi')"/>
</xsl:template>

Метод 2: применение шаблонов с режимом
Вы можете использовать элемент xsl:apply-templates с определенным режимом для сопоставления и замены всех вхождений определенного элемента. Вот пример:

<xsl:template match="text()" mode="replace">
  <xsl:value-of select="replace(., 'Hello', 'Hi')"/>
</xsl:template>
<xsl:template match="node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()" mode="replace"/>
  </xsl:copy>
</xsl:template>

Метод 3: использование функции tokenize()
Функция tokenize() разбивает строку на подстроки на основе указанного разделителя. Комбинируя tokenize() со string-join(), вы можете заменить все вхождения определенного значения. Вот пример:

<xsl:template match="/">
  <xsl:variable name="input" select="'apple,banana,apple,orange,apple'"/>
  <xsl:value-of select="string-join(tokenize($input, ','), 'pear')"/>
</xsl:template>

Метод 4: использование цикла for-each
Вы можете перебирать все элементы, соответствующие определенному шаблону, с помощью цикла for-each и соответствующим образом заменять их значения. Вот пример:

<xsl:template match="elementName">
  <xsl:copy>
    <xsl:choose>
      <xsl:when test=". = 'oldValue'">
        <xsl:text>newValue</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:copy>
</xsl:template>

XSLT 2.0 предоставляет несколько методов для замены всех вхождений определенных элементов или значений в XML-документе. В этой статье мы рассмотрели четыре различных подхода на примерах кода: использование функции replace(), применение шаблонов с помощью mode, использование функции tokenize() и использование цикла for-each. С помощью этих методов вы можете уверенно манипулировать данными XML и выполнять обширные преобразования с помощью XSLT 2.0.

Не забудьте выбрать метод, который лучше всего соответствует вашему конкретному случаю использования и требованиям. Приятного кодирования!