XSL转换器,它删除空格并将英寸转换为英尺

时间:2015-11-22 18:34:47

标签: xml xslt

我需要XSL,可以做以下事情: -

  1. 删除所有空属性
  2. 任何在名称和值中都有UOM的属性是IN我需要将其值更改为FEET
  3. 包含名称中的长度,宽度,高度的所有属性我需要将值转换为英尺(需要将数量转换为.083)
  4. 我的第一个要求是使用这个xsl: -

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="xml" indent="yes" version="1.0" encoding="UTF-8"/>
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:template>
        <xsl:template match="@*[not(normalize-space(.))]">
            <xsl:if test="descendant::*/@*[not(normalize-space(.))]">
                <xsl:copy />
            </xsl:if>
        </xsl:template>
    </xsl:stylesheet>
    

    输入你可以假设: -

    <Input BlankAttribute="" HeightUOM="IN" Height="1" WidthUOM="IN" WIdth="2" RandomAttribute="random"/>
    

1 个答案:

答案 0 :(得分:0)

如果您使用

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="@*[not(normalize-space(.))]"/>

    <xsl:template match="@*[contains(local-name(), 'UOM') and . = 'IN']">
        <xsl:attribute name="{name()}" namespace="{namespace-uri()}">FEET</xsl:attribute>
    </xsl:template>

    <xsl:template match="@*[contains(local-name(), 'Height') or contains(local-name(), 'Width') or contains(local-name(), 'Length')]">
        <xsl:attribute name="{name()}" namespace="{namespace-uri()}">
            <xsl:value-of select=". * 0.83"/>
        </xsl:attribute>
    </xsl:template>
</xsl:transform>

然后我认为您的所有条件都已实施,在线样本位于http://xsltransform.net/3NJ38Z4