2017-11-17 16 views
1

<P1>タグは、<web-app>の下に表示され、XMLファイルの<servlet>タグの下に表示されます。 <servlet>タグを<servlet-name>とDUMMYで検索し、サブタグ<p1-name>がB2 OR B3の場合は、<P1>タグを削除します。 <P1>タグを直接変更することはしません。<web-app>XSLTを検索および削除するための変換

私はIDテンプレートと検索に精通していますが、削除には苦労しています。私は将来同様の問題に取り組むことができるように任意のソリューションですか?

入力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-name>はB2 OR B3のいずれかであったので、DUMMYとして<servlet-name><servlet><P1>タグが削除されている場合、次のようになります。

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

答えて

2

恒等変換し、削除する要素のための空のテンプレートを使用してください:http://xsltransform.hikmatu.com/nbUY4ki

<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')]"/> 

を私は出力

<?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> 
+0

を取得しかし、どのようにこれらはP1を取り除くますp1-nameはB2とB3?上記のXSLT does notは、O/P xmlを生成するために共有するI/P XMLで動作するようです。 – TestUser

+0

http://xsltransform.hikmatu.com/nbUY4kiで私にとってうまく動作します。 –

+0

ありがとうございます。それは動作します。私は以前より不安定な動作をしていたいくつかのIDEの問題を抱えていました。すべて今良い。魅力的な作品。 – TestUser

関連する問題