Этот вопрос является расширением этого . У меня есть много значений, как показано ниже:
<myStuff>
<elem1>asdf</elem1>
<elem2>foo bar</elem2>
<elem3>foo bar foo</elem3>
<elem4>foofoo</elem4>
</myStuff>
Я выполняю copy-of
над MOST-элементами (select
в copy-of
очень специфично), а затем выполняю поиск и замену полученного XML, но я бы хотел объединить два В большинстве ситуаций, где я применил это, я заменил бы все, что говорит <xsl:value-of select="whatever">
на <xsl:apply-templates select="whatever">
и использовал бы следующий шаблон:
<xsl:template match="*">
<xsl:variable name="rep1">
<xsl:choose>
<xsl:when test='matches(., ".*foo.*")'>
<xsl:value-of select='replace(., "foo", "qwerty")' />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select='./text()' />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="rep2">
<xsl:choose>
<xsl:when test='matches(., ".*bar.*")'>
<xsl:value-of select='replace($rep1, "bar", "myBar")' />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select='$rep1' />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$rep2" />
</xsl:template>
Я хотел бы использовать аналогичный шаблон для замены copy-of
в моем коде (потому что я делаю те же замены, что и в других моих файлах, чтобы я мог использовать тот же шаблон), но я не уверен как это сделать.
Вывод будет выглядеть так:
<myOtherStuff>
<elem1>asdf</elem1>
<elem2>qwerty myBar</elem2>
<elem3>qwerty myBar qwerty</elem3>
<elem4>qwertyqwerty</elem4>
</myOtherStuff>
Вся помощь приветствуется и спасибо заранее!