2017-12-20 10 views
0

다른 요소 값의 선택에 따라 완전한 부모 노드를 제거해야합니다.노드 속성에 따라 중복 노드를 제거하기위한 XSLT

내 XML 지금

<EAI> 
    <SvcRS> 
     <accountHeader> 
      <errorHost>orgA</errorHost> 
     </accountHeader> 
     <accoutnDetails> 
      <accountNumber>0000000111118800</accountNumber> 
      <accountType>credit</accountType> 
      <errorDetails> 
       <code>111</code> 
       <description>Account is not valid</description> 
      </errorDetails> 
     </accoutnDetails> 
    </SvcRS> 
    <SvcRS> 
     <accountHeader> 
      <errorHost>orgB</errorHost> 
     </accountHeader> 
     <accoutnDetails> 
      <accountNumber>000111118800</accountNumber> 
      <accountType>credit</accountType> 
      <errorDetails> 
       <code>0001</code> 
       <description>Not enough balance</description> 
      </errorDetails> 
     </accoutnDetails> 
    </SvcRS> 
</EAI> 

있다가 같은 계좌 번호 111118800에 다음 orgA 경우, 내가 <errorHost>을 확인해야, 난에 대한 있도록 XML에서 여러 개의 계정이있을 수있다, orgB<accountDetails>를 제거해야 모두 내가 모든 세부 사항을 제거해야만한다. orgB

나는 많은 옵션을 시도하고 있지만 아무 것도 작동하지 않는 것 같다.

출력

<EAI> 
    <accoutnDetails> 
     <accountNumber>111118800</accountNumber> 
     <accountType>credit</accountType> 
     <errorHost>orgA</errorHost> 
     <errorDetails> 
      <code>111</code> 
      <description>Account is not valid</description> 
     </errorDetails> 
    </accoutnDetails> 
</EAI> 
+1

많은 옵션을 시도하고 있지만 아무 것도 작동하지 않습니다. - 시도한 내용과 원하는 XML 출력을 공유하십시오. –

+0

안녕하세요 Aniket, 내가 말했듯이, 내가 일할 수있는 옵션을 가지고 있지만 복잡한 도구를 수행 할 수있는 도구가 내장되어있는 제품이 있습니다. –

답변

0

이 시도 :

<?xml version="1.0" encoding="utf-8"?> 
    <xsl:stylesheet version="2.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="accoutnDetails[errorHost = 'orgB' and //accountNumber = accoutnDetails[errorHost = 'orgA']/accountNumber]"/> 

    </xsl:stylesheet> 

http://xsltransform.hikmatu.com/b4GWV8

에서 변환을 참조하십시오 업데이트 된 쿼리에 대해이 시도 :

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="SvcRS[accountHeader/errorHost = 'orgB' and accoutnDetails/accountNumber = //SvcRS[accountHeader/errorHost = 'orgA']/accoutnDetails/accountNumber]"/> 

</xsl:stylesheet> 

참조 TRA를 nsformation at http://xsltransform.net/gVrtEmq

+0

안녕하세요 Aniket, 이것은 매력처럼 작동합니다. errorHost가 accoutDetails 아래에 있지 않다면 accountHeader –

+0

@kekukeku 아래에있는 한 가지 더 묻습니다.이 경우 xslt를 편집하고 accountHeader에 대한 추가 조건을 추가해야합니다. – Rupesh

+0

새로운 XML을 업데이트했습니다. 제발 도와주세요 !! –