我正在寻找一个基于属性值从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>
这与我之前提出的问题类似,但唯一的区别是属性格式。根据节点值使用xslt从xml中删除节点
除非你隐藏了你的一个需求,否则在我看来答案只是:
<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>
看看你指出的链接,我发现我所做的与那里所做的非常相似。当你试图做以前做过的事情时发生了什么?
在@Ken idea的帮助下,以下代码实现了<xsl:template match="*[normalize-space()='DELETE']"/>
。