這是一個建議,根據我所做的評論。我寫一個樣式表採取的映射文件的形式
<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>
當然映射文件可適於根據你的需求,我主要試圖表明樣品從所述映射文件的第二樣式表然後被施加到一個輸入樣本。
首先,我會建議不要列出哪些領域不應該改變。然後我想知道映射是否需要包含像父代或祖先路徑一樣的上下文。然後我會建議通過編寫一個帶有映射文件的樣式表來解決問題,並生成一個新的樣式表,以實現給定映射文件的特定映射。 –