[Java] [XSLT]替换所有XML中的Map值

时间:2018-11-14 14:37:53

标签: java xml xslt xslt-1.0

我需要将所有出现的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>

对于nom,我的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>

新旧变量将是地图的键/值。

有人对如何做到这一点有想法吗?

谢谢。

0 个答案:

没有答案