2
如何使用xsl轉換替換xml中的屬性,具體取決於其值。 例如,如果有這樣的xmlxml屬性替換xslt
<Text Style='style1'>
...
</Text>
其轉換爲
<Text Font='Arial' Bold='true' Color='Red'>
...
</Text>
對於類型= '藍紫魅力'設置另一個屬性和值,例如字體= '三世' 斜體=」真正'。
如何使用xsl轉換替換xml中的屬性,具體取決於其值。 例如,如果有這樣的xmlxml屬性替換xslt
<Text Style='style1'>
...
</Text>
其轉換爲
<Text Font='Arial' Bold='true' Color='Red'>
...
</Text>
對於類型= '藍紫魅力'設置另一個屬性和值,例如字體= '三世' 斜體=」真正'。
一個可行的方法:使用屬性集。這個樣式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:attribute-set name="style1">
<xsl:attribute name="Font">Arial</xsl:attribute>
<xsl:attribute name="Bold">true</xsl:attribute>
<xsl:attribute name="Color">Red</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="style2">
<xsl:attribute name="Font">Sans</xsl:attribute>
<xsl:attribute name="Italic">true</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="Text[@Style='style1']">
<xsl:copy use-attribute-sets="style1">
<xsl:copy-of select="@*[name()!='Style']"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="Text[@Style='style2']">
<xsl:copy use-attribute-sets="style2">
<xsl:copy-of select="@*[name()!='Style']"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
有了這個輸入:
<root>
<Text Style='style1'></Text>
<Text Style='style2'></Text>
</root>
輸出:
<Text Font="Arial" Bold="true" Color="Red"></Text>
<Text Font="Sans" Italic="true"></Text>
其他方式:內聯 「屬性設置」。此樣式表:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my"
exclude-result-prefixes="my">
<xsl:output indent="yes"/>
<my:style1 Font="Arial" Bold="true" Color="Red"/>
<my:style2 Font="Sans" Italic="true"/>
<xsl:template match="Text[@Style]">
<xsl:copy>
<xsl:copy-of select="document('')/*/my:*
[local-name()=current()/@Style]/@*"/>
<xsl:copy-of select="@*[name()!='Style']"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您將需要某種規則來將樣式從一種轉換爲另一種。假設你正在輸入html,你需要類似的東西。
<xsl:template match="@* | node()">
<xsl:choose>
<xsl:when test="local-name() = 'Style'">
<xsl:apply-templates select="." mode="Style" />
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@Style" mode="Style">
<xsl:choose>
<xsl:when test="node() = 'style1'">
<xsl:attribute name="Font">Arial</xsl:attribute>
<xsl:attribute name="Bold">true</xsl:attribute>
<xsl:attribute name="Color">Red</xsl:attribute>
</xsl:when>
<xsl:when test="node() = 'style2'">
<xsl:attribute name="Font">Sans</xsl:attribute>
<xsl:attribute name="Bold">true</xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:template>