这是一个建议,基于我所做的评论。我写了一个样式表,格式为一个映射文件
<mr:mapping-rules xmlns:mr="http://example.com/mr">
<context pattern="Record">
<field src="field1" dest="field1337" />
</context>
</mr:mapping-rules>
在表单中生成样式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Record/field1">
<xsl:element name="field1337">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
创建上述样式表作为其输出的样式表是
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mr="http://example.com/mr"
xmlns:oxsl="http://example.com/xsl"
exclude-result-prefixes="oxsl mr">
<xsl:namespace-alias stylesheet-prefix="oxsl" result-prefix="xsl"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<oxsl:stylesheet version="1.0">
<oxsl:template match="@* | node()">
<oxsl:copy>
<oxsl:apply-templates select="@* | node()"/>
</oxsl:copy>
</oxsl:template>
<xsl:apply-templates/>
</oxsl:stylesheet>
</xsl:template>
<xsl:template match="mr:mapping-rules/context/field">
<oxsl:template match="{../@pattern}/{@src}">
<oxsl:element name="{@dest}">
<oxsl:apply-templates select="@* | node()"/>
</oxsl:element>
</oxsl:template>
</xsl:template>
</xsl:stylesheet>
然后您可以在输入上运行生成的样式表,例如
<Root>
<Record-List>
<Record>
<field1>foo</field1>
<field2>bar</field2>
<field3>baz</field3>
</Record>
</Record-List>
</Root>
它输出
<Root>
<Record-List>
<Record>
<field1337>foo</field1337>
<field2>bar</field2>
<field3>baz</field3>
</Record>
</Record-List>
</Root>
当然,映射文件可以根据您的需要进行调整,我主要尝试展示一个示例,该示例从映射文件生成第二个样式表,然后将其应用于输入示例。