【问题标题】:Delete property based on the property value xslt根据属性值 xslt 删除属性
【发布时间】:2015-08-25 21:31:40
【问题描述】:

我正在寻找一种基于属性值从 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

【问题讨论】:

    标签: xml xslt xslt-1.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>
    

    查看您指向的链接,我发现我所做的与那里所做的非常相似。当你尝试做之前做过的事情时发生了什么?

    【讨论】:

    • 当我使用上面的代码时出现以下错误,XPST0081: XSLT Pattern syntax error at char 12 on line 11 in {j:binding[normalize-space}: Undeclared namespace prefix {j}instead 我尝试了下面的代码并且它有效。&lt;xsl:template match="*[normalize-space()='DELETE']"/&gt;
    • ... 或者你可以定义命名空间前缀j
    【解决方案2】:

    在@Ken idea 的帮助下,下面的代码工作了&lt;xsl:template match="*[normalize-space()='DELETE']"/&gt;

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多