2013-08-07 2 views
0

특정 특성 값과 일치하는 자식 노드와 함께 부모 노드를 검색해야합니다. 입력 XML은부모와 함께 특정 자식 노드 필터링

<ErrorList> 
    <Table name="Table1" type="A"> 
     <Error category="Minor"> 
      <errorCode>100</errorCode> 
      <errorMessage>msg-100</errorMessage> 
     </Error> 
     <Error category="Major"> 
      <errorCode>101</errorCode> 
      <errorMessage>msg-101</errorMessage> 
     </Error> 
    </Table> 
    <Table name="Table2" type="B"> 
     <Error category="Fatal"> 
      <errorCode>102</errorCode> 
      <errorMessage>msg-102</errorMessage> 
     </Error> 
     <Error category="Major"> 
      <errorCode>105</errorCode> 
      <errorMessage>msg-101</errorMessage> 
     </Error>  
    </Table> 
</ErrorList> 

는 XSL 코드는 아래의 범주를 갖는 오류 노드 검색 치명적인 또는 마이너 속성입니다 :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output indent="yes" /> 

    <xsl:template match="Error[@category = 'Fatal'] | Error[@category = 'Minor']"> 
     <xsl:copy-of select="self::node()"/> 
    </xsl:template> 
<xsl:template match="text()"/> 
</xsl:stylesheet> 

는 출력 내가 얻을 :

<Error category="Minor"> 
     <errorCode>100</errorCode> 
     <errorMessage>msg-100</errorMessage> 
    </Error><Error category="Fatal"> 
     <errorCode>102</errorCode> 
     <errorMessage>msg-102</errorMessage> 
    </Error> 

예상 출력은 다음과 같습니다 (선택 하위 노드에 대한 부모 테이블 노드를 검색해야 함) :

<Table name="Table1" type="A"> 
     <Error category="Minor"> 
      <errorCode>100</errorCode> 
      <errorMessage>msg-100</errorMessage> 
     </Error> 
    </Table> 
    <Table name="Table2" type="B"> 
     <Error category="Fatal"> 
      <errorCode>102</errorCode> 
      <errorMessage>msg-102</errorMessage> 
     </Error> 
    </Table> 

원하는 출력을 얻으려면 xsl을 도와주세요.

<xsl:template match="Error[@category = 'Fatal'] | Error[@category = 'Minor']"> 
    <xsl:copy-of select="self::node()"/> 
</xsl:template> 

<xsl:template match="Table"> 
    <Table> 
     <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> 
     <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute> 
     <xsl:apply-templates/> 
    </Table> 
</xsl:template> 

<xsl:template match="text()"/> 

답변

0

는 원하는 결과를 생성하는 스타일이다. 정말 고맙습니다!
+0

완벽한 작품 : 여기에 – user2267955

+0

도와 드리겠습니다. 그것이 당신을 위해 작동한다면, 당신은 수락을 클릭 할 수 있습니다. – fred02138

+1

''및''을 사용하지 않고 결과에서 노드를 재구성 한 이유가 있었습니까? 또는''오류 요소에 대해? –