简体   繁体   English

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

[英]Removing node when subnode meet a specific conditon

I'm trying to remove node from an xml file when the subnode "number" equals 0. Here what is look like. 当子节点“数字”等于0时,我试图从xml文件中删除该节点。这看起来像什么。

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

What I want is that 我想要的是

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

This the xslt that I tried but it's not giving me the results that I wanted 这是我尝试过的xslt,但没有给我想要的结果

First try: 第一次尝试:

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

Second try 第二次尝试

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

Do you know where I made my mistake ? 你知道我犯错了吗? I'm really blocked and everything I tried seems to not work as excpected. 我真的被挡住了,我尝试的一切似乎都无法正常工作。

Thank you in advance for your help 预先感谢您的帮助

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM