我想知道一种简单的方法,可以通过字符串中的值来解析{myParameterX}
。
我的xml中有一个部分(明显简化为帖子),它包含参数定义和一组字符串“translate”:
<section>
<parameters>
<myParameter1>One</myParameter1>
<myParameter2>Two</myParameter2>
</parameters>
<field toTranslate="{myParameter1} + {myParameter1} = {myParameter2}"/>
<field toTranslate="{myParameter2} - {myParameter1} = {myParameter1}"/>
</section>
最后我期待的是:
<field translated="One + One = Two"/>
<field translated="Two - One = One"/>
我认为解决方案已接近,但我的正则表达式(Unexpected token ")" in path expression
)中的无效字符仍然存在令人讨厌的错误。我试图逃脱并逃脱逃脱角色,但我无法得到它:(
<xsl:template name="resolve">
<xsl:param name="toResolve" as="xs:string"/>
<xsl:param name="parameters" as="element()"/>
<xsl:analyze-string regex="{(.+)}" select="$toResolve">
<xsl:matching-substring>
<xsl:variable name="pName" select="regex-group(1)"/>
<xsl:value-of select="$parameters/$pName"/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
<xsl:call-template name="resolve">
<xsl:with-param name="toResolve" select="field/@toTranslate"/>
<xsl:with-param name="parameters" select="parameters"/>
</xsl:call-template>
注意,我使用的是xslt 2.0 有什么想法吗?
答案 0 :(得分:3)
试试<xsl:analyze-string regex="\{{(.+?)\}}" select="$toResolve">
。
以下是完整的示例:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* , node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="field/@toTranslate">
<xsl:variable name="field" select=".."/>
<xsl:attribute name="translated">
<xsl:analyze-string regex="\{{(.+?)\}}" select=".">
<xsl:matching-substring>
<xsl:variable name="pName" select="regex-group(1)"/>
<xsl:value-of select="$field/../parameters/*[local-name() eq $pName]"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
变换
<section>
<parameters>
<myParameter1>One</myParameter1>
<myParameter2>Two</myParameter2>
</parameters>
<field toTranslate="{myParameter1} + {myParameter1} = {myParameter2}"/>
<field toTranslate="{myParameter2} - {myParameter1} = {myParameter1}"/>
</section>
到
<?xml version="1.0" encoding="UTF-8"?><section>
<parameters>
<myParameter1>One</myParameter1>
<myParameter2>Two</myParameter2>
</parameters>
<field translated="One + One = Two"/>
<field translated="Two - One = One"/>
</section>