根据属性值xslt删除属性

时间:2013-08-05 20:42:06

标签: xml xslt xslt-1.0

我正在寻找一个逻辑,根据propety的值从xml文件中删除属性。 在以下示例中:

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

有一个名为“DELETE”的值,当我在XML文件中看到“DELETE”字样时,必须删除该特定属性。

<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">
                                @myabcdefService.myabcdefServiceUrl@
                          </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">
                                @myabcdefService.myabcFileNet@
                          </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">
                                @myabcdefService.myabcdefServiceUrl@
                          </jndi:value>
                    </jndi:binding>

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

这类似于我之前提出的问题,但唯一的区别是属性格式。 Delete node from xml using xslt based on node value

2 个答案:

答案 0 :(得分: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>

看着你指出的链接,我看到我所做的就像那里做的很多。当你试图做以前做过的事情时发生了什么?

答案 1 :(得分:0)

在@Ken构思的帮助下,以下代码工作<xsl:template match="*[normalize-space()='DELETE']"/>