2013-08-05 3 views
1

속성 값을 기반으로 xml 파일에서 속성을 삭제하는 논리를 찾고 있습니다. 다음 예에서 :속성 값을 기반으로 속성 삭제 xslt

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

내가 특정 속성을 삭제하는 단어는 XML 파일에서 "삭제"를 참조 whereever "삭제"라는 값을 가지고있다.

<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

위 코드를 사용할 때 다음과 같은 오류가 발생합니다.'XPST0081 : XSLT 11 행의 char 12에서 XSLT 패턴 구문 오류가 발생했습니다. {j : binding [normalize-space} : 대신 선언되지 않은 네임 스페이스 접두어 {j} 다음 코드와 함께 작동했습니다. "' – phani

+0

... 아니면 네임 스페이스 접두어'j'를 정의 할 수 있습니다. –

0

@Ken 아이디어 덕분에 다음 코드는 <xsl:template match="*[normalize-space()='DELETE']"/>을 처리했습니다.

관련 문제