任何人都可以帮助拧紧XSLT,我想要对一个属性的值进行子串" UDF / @ Value"前20个字符和我想将所有UDF / @ Value 。
输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Header FileDate="02/12/2015" InputDateFormat="MM/dd/yyyy"/>
<Body DataType="Account">
<Account Name="XYZ" InceptionDate="03/01/2005" DEPT="USD BU" BusinessUnit="WTC" ClientAccountId="123" ISOCurrency="USD" >
<UDF Name="Product" Value="DUMMY"/>
<UDF Name="QUANTITY" Value="abc def ghi jkl mno pqr stu vwz yz"/>
</Account>
<Account Name="ABC" InceptionDate="03/01/2005" DEPT="USD BU" BusinessUnit="WTC" ClientAccountId="124" ISOCurrency="USD" >
<UDF Name="Comment" Value="abc 10percent and 20 and at xyz"/>
<UDF Name="Product Code" Value="EMMKTOPP"/>
</Account>
</Body>
<Trailer RecordCount="2"/>
</root>
输出xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Header FileDate="02/12/2015" InputDateFormat="MM/dd/yyyy"/>
<Body DataType="Account">
<Account Name="XYZ" InceptionDate="03/01/2005" DEPT="USD BU" BusinessUnit="WTC" ClientAccountId="123" ISOCurrency="USD" >
<UDF Name="Product" Value="DUMMY"/>
<UDF Name="QUANTITY" Value="abc def ghi jkl mno "/>
</Account>
<Account Name="ABC" InceptionDate="03/01/2005" DEPT="USD BU" BusinessUnit="WTC" ClientAccountId="124" ISOCurrency="USD" >
<UDF Name="Comment" Value="abc 10percent and 20"/>
<UDF Name="Product Code" Value="EMMKTOPP"/>
</Account>
</Body>
<Trailer RecordCount="2"/>
</root>
答案 0 :(得分:2)
您可以使用身份模板复制所有节点:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
一个处理UDF
元素的特定模板,仅在Value
属性上应用子字符串:
<xsl:template match="UDF">
<UDF Value="{substring(@Value, 0, 20)}" Name="{@Name}"/>
</xsl:template>