我对 xsl 和函数式编程还很陌生,因此我将不胜感激在这方面的帮助:
我有一个模板可以转换一些 xml 并提供输出。问题是有许多xs:date类型的元素,都在不同的上下文中,必须本地化。我使用这些 xs:dates 的子字符串串联来生成本地化的日期模式字符串。
正如你可以猜到的那样,这会导致大量的复制粘贴“ substring-this 和 substring-that ”。如何编写一个模板来自动将 xs:date 类型的所有元素转换为保留所有上下文感知转换的本地化字符串?
我的 xsl 是这样的:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="/">
...
<input value="{substring(/select/a/date 9,2)}.{substring(/select/a/date, 6,2)}.{substring(/select/a/date 1,4)}">
...
<!-- assume that following examples are also with substrings -->
<div><xsl:value-of select="different-path/to_date"/></div>
...
<table>
<tr><td><xsl:value-of select="path/to/another/date"/></td></tr>
</table>
<apply-templates/>
</xsl:template>
<xsl:template match="something else">
<!-- more dates here -->
</xsl:template>
</xsl:stylesheet>
我希望我能把我的问题说清楚=)
UPD:这是一个 xml 示例:
<REQUEST>
<header>
<... />
<ref>
<ref_date type="xs:date">1970-01-01</ref_date>
</ref>
</header>
<general>
<.../>
<info>
<.../>
<date type="xs:date">1970-01-01</date>
<ExpireDate type="xs:date">1970-01-01</ExpireDate>
<RealDate type="xs:date">1970-01-01</RealDate>
<templateDetails>template details</templateDetails>
<effectiveDate type="xs:date">1970-01-01</effectiveDate>
</info>
<party>
<.../>
<date type="xs:date">1970-01-01</date>
</party>
<!-- many other parts of such kind -->
</general>
</REQUEST>
至于输出,有很多不同的选择。主要是这些值必须设置为不同html对象的值,比如表格、输入字段等。您可以在 xsl 清单中看到一个示例。
PS我使用的是xsl 1.0。