2013-08-05 59 views
1

我正在尋找一個邏輯來根據propety的值從xml文件中刪除屬性。 在下面的例子:基於屬性值刪除屬性xslt

<jndi:binding name="myabc/myconfig/myservice/myabcservice"> 
     <jndi:value type="java.lang.String"> 
      DELETE 
     </jndi:value> 
</jndi:binding> 

由具有所謂的「刪除」的值,無論我看到單詞「刪除」中的XML文件,該特定屬性必須被刪除。

<mbean code="org.jboss.naming.JNDIBindingServiceMgr" 
      name="abc.myconfig.jndi:name=myconfigAppPartitionJNDI"> 
      <attribute name="BindingsConfig" serialDataType="jbxb"> 
       <jndi:bindings 
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:jndi="urn:jboss:jndi-binding-service:1.0" 
        xs:schemaLocation="urn:jboss:jndi-binding-service:1.0 resource:jndi-binding-service_1_0.xsd">     
        <jndi:binding name="myabc/myconfig/myabcdefService/myabcdefServiceUrl"> 
          <jndi:value type="java.lang.String"> 
           @[email protected] 
          </jndi:value> 
        </jndi:binding> 
        <jndi:binding 
         name="myabc/myconfig/myservice/myabcservice"> 
         <jndi:value type="java.lang.String"> 
          DELETE 
         </jndi:value> 
        </jndi:binding> 
        <jndi:binding name="myabc/myconfig/myabcdefService/myabcFileNet"> 
          <jndi:value type="java.lang.String"> 
           @[email protected] 
          </jndi:value> 
        </jndi:binding> 
       </jndi:bindings> 
      </attribute> 
     </mbean> 

預期輸出是:

<mbean code="org.jboss.naming.JNDIBindingServiceMgr" 
      name="abc.myconfig.jndi:name=myconfigAppPartitionJNDI"> 
      <attribute name="BindingsConfig" serialDataType="jbxb"> 
       <jndi:bindings 
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:jndi="urn:jboss:jndi-binding-service:1.0" 
        xs:schemaLocation="urn:jboss:jndi-binding-service:1.0 resource:jndi-binding-service_1_0.xsd">     
        <jndi:binding name="myabc/myconfig/myabcdefService/myabcdefServiceUrl"> 
          <jndi:value type="java.lang.String"> 
           @[email protected] 
          </jndi:value> 
        </jndi:binding> 

        <jndi:binding name="myabc/myconfig/myabcdefService/myabcFileNet"> 
          <jndi:value type="java.lang.String"> 
           @[email protected] 
          </jndi:value> 
        </jndi:binding> 
       </jndi:bindings> 
      </attribute> 
     </mbean> 

這與我之前問這個問題,但唯一不同的是財產的格式。 Delete node from xml using xslt based on node value

回答

1

除非你是隱藏你的需求之一,在我看來,答案就是:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:j="urn:jboss:jndi-binding-service:1.0" 
       version="1.0"> 

<xsl:template match="j:binding[normalize-space(j:value)='DELETE']"/> 

<xsl:template match="@*|node()"><!--identity for all other nodes--> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

而且看着你指出的鏈接,我看到我所做的是很像那裏做了什麼。當你試圖完成之前的工作時會發生什麼?

+0

當我在{j:binding [normalize-space}: 未聲明的命名空間前綴{j}'上使用上述代碼,XPST0081:第12行字符12處的XSLT模式語法錯誤時,我得到以下錯誤'下面的代碼和它的工作原理。' – phani

+0

...或者你可以定義命名空間前綴'j'。 –

0

在@Ken的想法的幫助下,以下代碼工作<xsl:template match="*[normalize-space()='DELETE']"/>