XSLT结合了两个模板过滤器信息

时间:2014-10-30 16:06:58

标签: xml xslt

我是XSLT和XML的新手。

我目前正在从XML文档中过滤一些信息,我想在同一文档上再应用一个模板。

我不确定如何组合这两个模板。

如果有人可以指导我。

这是我的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<People>
<Person>
<num>0000022222</num>
<first-name>Mike</first-name>
<last-name>Jhonny</last-name>
<licenses>
    <license>
        <number>1762539</number>
    </license>
    <license>
        <number>1762538</number>
    </license>
</licenses>
<not-required>
    <one>12345</one>
    <two>54321</two>
</not-required>
</Person>
<Person>
<num>0000011111</num>
<first-name>John</first-name>
<last-name>Jhonny</last-name>
<licenses>
    <license>
        <number>1762539</number>
    </license>
    <license>
        <number>1762538</number>
    </license>
</licenses>
<not-required>
    <one>12345</one>
    <two>54321</two>
</not-required>
</Person>
</People>

我想过滤<not-required></not-required>标签,我能够做到。

我还希望过滤<num>代码的前导零。

我知道我可以通过应用此模板来实现。

 <xsl:template match="num">
  <xsl:value-of select="number(.)"/>
 </xsl:template>

我目前使用的XSLT如下:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="not-required"/>
</xsl:stylesheet>

这就是我获取输出的方式:

<?xml version="1.0" encoding="UTF-8"?>
<People>
<Person>
    <number>0000022222</number>
    <first-name>Mike</first-name>
    <last-name>Jhonny</last-name>
    <licenses>
        <license>
            <number>1762539</number>
        </license>
        <license>
            <number>1762538</number>
        </license>
    </licenses>
</Person>
<Person>
    <number>0000011111</number>
    <first-name>John</first-name>
    <last-name>Jhonny</last-name>
    <licenses>
        <license>
            <number>1762539</number>
        </license>
        <license>
            <number>1762538</number>
        </license>
    </licenses>
</Person>
</People>

这就是我所期待的

<?xml version="1.0" encoding="UTF-8"?>
<People>
<Person>
    <number>22222</number>
    <first-name>Mike</first-name>
    <last-name>Jhonny</last-name>
    <licenses>
        <license>
            <number>1762539</number>
        </license>
        <license>
            <number>1762538</number>
        </license>
    </licenses>
</Person>
<Person>
    <number>11111</number>
    <first-name>John</first-name>
    <last-name>Jhonny</last-name>
    <licenses>
        <license>
            <number>1762539</number>
        </license>
        <license>
            <number>1762538</number>
        </license>
    </licenses>
</Person>
</People>

有人可以指导我如何组合该模板以删除前导零。

1 个答案:

答案 0 :(得分:2)

只需将此模板添加到现有样式表(作为第三个模板以及您已有的两个模板):

<xsl:template match="num">
    <xsl:copy>
        <xsl:value-of select="number(.)"/>
    </xsl:copy>
</xsl:template>