【发布时间】:2016-12-07 01:13:52
【问题描述】:
我们的软件有用户可编辑的 XML 配置文件,然后在我们的 Java 应用程序中解组。我们希望允许我们或我们的用户能够添加新变量以在配置文件中的字符串中使用。
我有这种结构的 XML:
<root>
<variables>
<key1>foo</key1>
<key2>bar</key1>
...
<keyn>nthbar</keyn>
</variables>
<some-tag>PlainText.${key1}.${keyn}.${key2}.MorePlainText</some-tag>
<other-tag>${key3}</other-tag>
</root>
我知道我可以使用 XSLT 2.0 执行类似的操作来替换已知键的值:
<xsl:variable name="key1" select="root/variables/key1/text()" />
<xsl:variable name="key2" select="root/variables/key1/text()" />
...
<xsl:variable name="keyn" select="root/variables/key1/text()" />
<xsl:template match="text()">
<xsl:value-of select="replace( replace( replace( ., '\$\{val1\}', $key1), '\$\{val2\}', $key2), '\$\{valn\}', $keyn)" />
</xsl:template>
问题在于这不是很灵活。每次添加新键时,新的 replace() 都需要包装现有的 replace() 调用,并且需要在相应的 xsl 文件中声明一个新变量。
有没有一种巧妙的方式使用 XSLT 在 XML 文件的其他地方的字符串中使用 ${keyn} 之类的东西来引用值之类的标签?
【问题讨论】: