我有以下xml部分:
<Column customerfield="Title" companyfield="2241"
datatype="alphanumeric" length="17"
customervalue="Manager Sales Compensation Head Office"
companyvalue="Manager Sales Compensation Head Office"
remark=""/>
我想用XSLT 2.0检查客户值是否超过指定的长度(也存在于XML中)。
到目前为止我所拥有的是
<xsl:template match="Column[@companyfield='2241' and @datatype='alphanumeric' and @companyvalue[string-length()>number(@length)]]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="companyvalue">
<xsl:value-of select="substring(@customervalue,1,17)"/>
</xsl:attribute>
<xsl:attribute name="remark">String value too long.</xsl:attribute>
</xsl:copy>
</xsl:template>
起初我只使用'&gt; @length',但我将其更改为'number(@length)',认为它可能被解释为字符串,但没有帮助。当我将'number(@length)'或'@length'更改为固定数字时,让我们说17可行。
非常欢迎任何想法。
答案 0 :(得分:1)
评估number(@length)
时,它位于companyvalue
属性的上下文中。实际上,它会在length
属性上查找companyvalue
属性,而不是Company
元素。
你需要这样做......
Column[@companyfield='2241'
and @datatype='alphanumeric'
and @companyvalue[string-length() > number(../@length)]]
或许这......
Column[@companyfield='2241'
and @datatype='alphanumeric'
and string-length(@companyvalue) > number(@length)]