子节点满足特定条件时删除节点

时间:2017-03-29 10:15:26

标签: xml xslt xslt-1.0

当子节点" number"时,我试图从xml文件中删除节点。等于0.这就是看起来像。

<deFac xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="baba_002.xsd">
  <fact>
    <refact>163620515-01</refact>
    <date>2016-09-06</date>
    <demfact>
      <number>0</number>
      <brut>81.46</brut>
      <net>81.46</net>
    </demfact>
   </fact>
  <fact>
    <refact>163621197-02</refact>
    <date>2016-09-06</date>
    <demfact>
      <number>11</number>
      <brut>61.44</brut>
      <net>61.44</net>
    </demfact>
  </fact>
  <fact>
    <refact>163621203-01</refact>
    <date>2016-09-06</date>
    <demfact>
      <number>1</number>
      <brut>4.55</brut>
      <net>4.55</net>
    </demfact>
  </fact>
  <fact>
    <refact>163621198-01</refact>
    <date>2016-09-06</date>
    <demfact>
      <number>0</number>
      <brut>1.71</brut>
      <net>1.71</net>
    </demfact>
  </fact>
</deFac>

我想要的是

<deFac xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="baba_002.xsd">
  <fact>
    <refact>163621197-02</refact>
    <date>2016-09-06</date>
    <demfact>
      <number>11</number>
      <brut>61.44</brut>
      <net>61.44</net>
    </demfact>
  </fact>
  <fact>
    <refact>163621203-01</refact>
    <date>2016-09-06</date>
    <demfact>
      <number>1</number>
      <brut>4.55</brut>
      <net>4.55</net>
    </demfact>
  </fact>
</deFac>

这是我试过的xslt,但它没有给我我想要的结果

首先尝试:

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

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="fact[number = !0]"/>
</xsl:stylesheet>

第二次尝试

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="deFac/fact"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="deFac/fact/[demfact/number != '0']">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
    </xsl:copy>
  </xsl:template>
  </xsl:stylesheet>

你知道我犯了什么错吗?我真的被封锁了,我尝试过的所有东西似乎都没有被解雇。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

首次尝试时,将<xsl:template match="fact[number = !0]"/>更改为<xsl:template match="fact[demfact/number = 0]"/>