XSLT转换为搜索和删除

时间:2017-11-17 08:35:59

标签: xml xslt transform xslt-2.0 xslt-grouping

<P1>标记显示在<web-app>下方和XML文件中的<servlet>标记下方。 我想将<servlet>标记与<servlet-name>标记为DUMMY,然后在其子标记<P1>等于B2或B3时删除其下的<p1-name>标记。我们不想直接用<P1>

来更改<web-app>标签

我熟悉身份模板和搜索,但很难删除。任何解决方案,以便我将来可以解决类似的问题?

输入XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true">

<P1>IGNORE1</P1>
<P1>IGNORE2</P1>

<servlet>
    <servlet-name>TEST</servlet-name>
        <servlet-class>com.mm.bb.servlet.TEST</servlet-class>
        <P1>
            <p1-name>A1</p1-name>
            <p1-value>A11111</p1-value>
        </P1>
        <P1>
            <p1-name>A2</p1-name>
            <p1-value>A22222</p1-value>
        </P1>
        <P1>
            <p1-name>A3</p1-name>
                <p1-value/>
        </P1>
        <P1>
            <p1-name>A4</p1-name>
                <p1-value/>
        </P1>
        <P1>
            <p1-name>A5</p1-name>
                <p1-value/>
        </P1>

      <junk>1</junk>
  </servlet>

<servlet>
    <servlet-name>DUMMY</servlet-name>
        <servlet-class>com.mm.bb.servlet.DUMMY</servlet-class>
        <P1>
            <p1-name>B1</p1-name>
            <p1-value>B11111</p1-value>
        </P1>
        <P1>
            <p1-name>B2</p1-name>
            <p1-value>A22222</p1-value>
        </P1>
        <P1>
            <p1-name>B3</p1-name>
                <p1-value/>
        </P1>
        <P1>
            <p1-name>B4</p1-name>
                <p1-value/>
        </P1>
        <P1>
            <p1-name>B5</p1-name>
                <p1-value/>
        </P1>

      <junk>1333</junk>
  </servlet>

<servlet>
    <servlet-name>SAMMY</servlet-name>
        <servlet-class>com.mm.bb.servlet.SAMMY</servlet-class>
        <P1>
            <p1-name>C1</p1-name>
            <p1-value>B11111</p1-value>
        </P1>
        <P1>
            <p1-name>C2</p1-name>
            <p1-value>A22222</p1-value>
        </P1>
        <P1>
            <p1-name>C3</p1-name>
                <p1-value/>
        </P1>
        <P1>
            <p1-name>C4</p1-name>
                <p1-value/>
        </P1>
        <P1>
            <p1-name>C5</p1-name>
                <p1-value/>
        </P1>

      <junk>12313</junk>
  </servlet>


<D>
        <D1>
            <D11>admin</D11>            
        </D1>
        <D2>
            <D21>XX</D21>
        </D2>
</D>

<E>
     <E1>Yo</E1>
     <E2>Hello</E2>
</E>

</web-app>

O / P XML应该如下所示,<P1><servlet>标记为<servlet-name>作为DUMMY被删除,因为<p1-name>是B2或B3。

 <?xml version="1.0" encoding="UTF-8"?>
  <web-app metadata-complete="true">
  <P1>IGNORE1</P1>
  <P1>IGNORE2</P1> 


        <servlet>
        <servlet-name>TEST</servlet-name>
            <servlet-class>com.mm.bb.servlet.TEST</servlet-class>
            <P1>
                <p1-name>A1</p1-name>
                <p1-value>A11111</p1-value>
            </P1>
            <P1>
                <p1-name>A2</p1-name>
                <p1-value>A22222</p1-value>
            </P1>
            <P1>
                <p1-name>A3</p1-name>
                    <p1-value/>
            </P1>
            <P1>
                <p1-name>A4</p1-name>
                    <p1-value/>
            </P1>
            <P1>
                <p1-name>A5</p1-name>
                    <p1-value/>
            </P1>

          <junk>1</junk>
      </servlet>

    <servlet>
        <servlet-name>DUMMY</servlet-name>
            <servlet-class>com.mm.bb.servlet.DUMMY</servlet-class>
            <P1>
                <p1-name>B1</p1-name>
                <p1-value>B11111</p1-value>
            </P1>


            <P1>
                <p1-name>B4</p1-name>
                    <p1-value/>
            </P1>
            <P1>
                <p1-name>B5</p1-name>
                    <p1-value/>
            </P1>

          <junk>1333</junk>
      </servlet>

    <servlet>
        <servlet-name>SAMMY</servlet-name>
            <servlet-class>com.mm.bb.servlet.SAMMY</servlet-class>
            <P1>
                <p1-name>C1</p1-name>
                <p1-value>B11111</p1-value>
            </P1>
            <P1>
                <p1-name>C2</p1-name>
                <p1-value>A22222</p1-value>
            </P1>
            <P1>
                <p1-name>C3</p1-name>
                    <p1-value/>
            </P1>
            <P1>
                <p1-name>C4</p1-name>
                    <p1-value/>
            </P1>
            <P1>
                <p1-name>C5</p1-name>
                    <p1-value/>
            </P1>

          <junk>12313</junk>
      </servlet>


    <D>
            <D1>
                <D11>admin</D11>            
            </D1>
            <D2>
                <D21>XX</D21>
            </D2>
    </D>

    <E>
         <E1>Yo</E1>
         <E2>Hello</E2>
    </E>

</web-app>

1 个答案:

答案 0 :(得分:2)

对要删除的元素使用标识转换和空模板:

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

<xsl:template match="servlet[servlet-name = 'DUMMY']/P1[p1-name = ('B2', 'B3')]"/>

http://xsltransform.hikmatu.com/nbUY4ki我得到输出

<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true">
   <P1>IGNORE1</P1>
   <P1>IGNORE2</P1>
   <servlet>
      <servlet-name>TEST</servlet-name>
      <servlet-class>com.mm.bb.servlet.TEST</servlet-class>
      <P1>
         <p1-name>A1</p1-name>
         <p1-value>A11111</p1-value>
      </P1>
      <P1>
         <p1-name>A2</p1-name>
         <p1-value>A22222</p1-value>
      </P1>
      <P1>
         <p1-name>A3</p1-name>
         <p1-value/>
      </P1>
      <P1>
         <p1-name>A4</p1-name>
         <p1-value/>
      </P1>
      <P1>
         <p1-name>A5</p1-name>
         <p1-value/>
      </P1>
      <junk>1</junk>
   </servlet>
   <servlet>
      <servlet-name>DUMMY</servlet-name>
      <servlet-class>com.mm.bb.servlet.DUMMY</servlet-class>
      <P1>
         <p1-name>B1</p1-name>
         <p1-value>B11111</p1-value>
      </P1>
      <P1>
         <p1-name>B4</p1-name>
         <p1-value/>
      </P1>
      <P1>
         <p1-name>B5</p1-name>
         <p1-value/>
      </P1>
      <junk>1333</junk>
   </servlet>
   <servlet>
      <servlet-name>SAMMY</servlet-name>
      <servlet-class>com.mm.bb.servlet.SAMMY</servlet-class>
      <P1>
         <p1-name>C1</p1-name>
         <p1-value>B11111</p1-value>
      </P1>
      <P1>
         <p1-name>C2</p1-name>
         <p1-value>A22222</p1-value>
      </P1>
      <P1>
         <p1-name>C3</p1-name>
         <p1-value/>
      </P1>
      <P1>
         <p1-name>C4</p1-name>
         <p1-value/>
      </P1>
      <P1>
         <p1-name>C5</p1-name>
         <p1-value/>
      </P1>
      <junk>12313</junk>
   </servlet>
   <D>
      <D1>
         <D11>admin</D11>
      </D1>
      <D2>
         <D21>XX</D21>
      </D2>
   </D>
   <E>
      <E1>Yo</E1>
      <E2>Hello</E2>
   </E>
</web-app>