如何使用XSLT在XML中子字符串

时间:2015-03-03 02:58:02

标签: xml xslt

任何人都可以帮助拧紧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>

1 个答案:

答案 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>