[Java] [XSLT] Заменить значения карты во всех XML - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужно заменить все вхождения ключей карты Java на их значения.Я использую xslt 1.0 и не знаю, как действовать.

Например: в Java у меня есть карта,

Map<String, String> myMap = new HashMap<String,String>();
myMap.add("valueToReplace1","valueReplaced1");
myMap.add("valueToReplace2","valueReplaced2");
myMap.add("valueToReplace3","valueReplaced3");

Пример ввода XML

<Root>
<attribute1>I want to replace valueToReplace1</attribute1>
<attribute2>
<subAttribute1>I want to replace valueToReplace2
</subAttribute1>
</attribute2>
<attribute3>valueToReplace3</attribute3>
</Root>

И что я ожидаю:

<Root>
<attribute1>I want to replace valueReplaced1</attribute1>
<attribute2>
<subAttribute1>I want to replace valueReplaced2
</subAttribute1>
</attribute2>
<attribute3>valueReplaced3</attribute3>
</Root>

для моего моего файла xls выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:param name="old" />
    <xsl:param name="new" />

    <xsl:output method="xml" />

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="text()" name="text" priority="5">

        <xsl:param name="pString" select="." />
        <xsl:choose>
            <xsl:when test="$old and contains($pString,$old)">
                <xsl:value-of
                    select="concat(substring-before($pString,$old),$new)" />
                <xsl:call-template name="text">
                    <xsl:with-param name="pString"
                        select="substring-after($pString,$old)" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$pString" />
            </xsl:otherwise>
        </xsl:choose>

    </xsl:template>

переменные old new будут ключом / значением карты.

У кого-нибудь есть идеи, как это сделать?

Заранее спасибо.

...