2014-10-30 56 views
0

我是XSLT和XML的新手。XSLT结合了两个模板过滤器信息

我目前正在过滤来自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> 

有人可以指导我如何co mbine模板来取得前导零。

回答

2

刚(除了你已经有两个作为第三模板)这个模板添加到您现有的样式表:

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

出于某种原因,当我加入这个以前它是不工作。这很奇怪,所以我问了这个问题。 – Aniks 2014-10-30 16:46:22

+1

您的版本没有xsl:copy。 – 2014-10-30 16:49:47

+0

很好,非常感谢你帮助我。 – Aniks 2014-10-30 18:25:52