2012-12-17 7 views
0

저는 XSLT 전문가가 아니며 여기에서 도움을 요청합니다. 여기 XSLT 요소 연결

내 XML의 입력 :

<?xml version="1.0" encoding="UTF-8"?> 
<Target_Root> 
<RecordHeader> 
    <FileHeader>1234567</FileHeader> 
</RecordHeader> 
<TransDetails> 
    <TransHeader> 
     <FileHeaderRec/> 
     <BatchHeaderRec/> 
     <OrderingPartyRec/> 
     <TransBody> 
      <TransactionRec/> 
      <DescRec> 
       <_0160> 
        <RecordCode>1</RecordCode> 
        <VariantCode>A</VariantCode> 
        <Description>Srii1 </Description> 
       </_0160> 
      </DescRec> 
      <DescRec> 
       <_0160> 
        <RecordCode>1</RecordCode> 
        <VariantCode>A</VariantCode> 
        <Description>Srii2</Description> 
       </_0160> 
      </DescRec> 
      <NameBenRec/> 
      <CityBenRec/> 
     </TransBody> 
        <TransBody> 
      <TransactionRec/> 
      <DescRec> 
       <_0160> 
        <RecordCode>1</RecordCode> 
        <VariantCode>A</VariantCode> 
        <Description>Srii3 </Description> 
       </_0160> 
      </DescRec> 
      <DescRec> 
       <_0160> 
        <RecordCode>1</RecordCode> 
        <VariantCode>A</VariantCode> 
        <Description>Srii4</Description> 
       </_0160> 
      </DescRec> 
      <NameBenRec/> 
      <CityBenRec/> 
     </TransBody> 
    </TransHeader> 
    <BatchTrailerRec/> 
    <FileTrailerRec/> 
</TransDetails> 

내 의도 된 출력은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<Target_Root> 
<RecordHeader> 
    <FileHeader>1234567</FileHeader> 
</RecordHeader> 
<TransDetails> 
    <TransHeader> 
     <FileHeaderRec/> 
     <BatchHeaderRec/> 
     <OrderingPartyRec/> 
     <TransBody> 
      <TransactionRec/> 
      <DescRec> 
       <_0160> 
        <RecordCode>1</RecordCode> 
        <VariantCode>A</VariantCode> 
        <Description>Srii1 Srii2</Description> 
       </_0160> 
      </DescRec> 
      <NameBenRec/> 
      <CityBenRec/> 
     </TransBody> 
     <TransBody> 
      <TransactionRec/> 
      <DescRec> 
       <_0160> 
        <RecordCode>1</RecordCode> 
        <VariantCode>A</VariantCode> 
        <Description>Srii3 Srii4</Description> 
       </_0160> 
      </DescRec> 
      <NameBenRec/> 
      <CityBenRec/> 
     </TransBody> 
    </TransHeader> 
    <BatchTrailerRec/> 
    <FileTrailerRec/> 
</TransDetails> 
볼 수 있듯이

, 나는 아래 요소의 값을 연결하려고 하나의 컨텍스트 ID 아래에 속하는 세그먼트 사내 응용 프로그램을 사용하여 수행 할 수는 있지만 시간이 많이 소요되는 것 같습니다. 누구든지이 요구 사항에 직면 했습니까? 귀하의 도움에 미리 감사드립니다.

답변

0

ID 변환을 기반으로 구축 할 수 있습니다. 설명을 보려면 주석을보십시오.

제안 1.0 XSLT 을 위해 :

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

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

    <!-- Do nothing for DescRec elements that have a preceding sibling DescRec --> 
    <xsl:template match="DescRec[preceding-sibling::DescRec]"/> 

    <!-- For Description elements, concatenate the content of all the Description elements 
     within the same TransBody context --> 
    <xsl:template match="Description"> 
    <xsl:copy> 
     <xsl:for-each select="ancestor::TransBody//Description"> 
     <xsl:value-of select="."/> 
     </xsl:for-each> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

2.0 XSLT 경우 :

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

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

    <!-- Do nothing for DescRec elements that have a preceding sibling DescRec --> 
    <xsl:template match="DescRec[preceding-sibling::DescRec]"/> 

    <!-- For Description elements, concatenate the content of all the Description elements 
     within the same TransBody context --> 
    <xsl:template match="Description"> 
    <xsl:copy> 
     <xsl:value-of select="ancestor::TransBody//Description" separator="''"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+0

브릴리언트 일, @Thomas는 W.이 마법처럼 작동합니다, 감사합니다. :-D – Srii

+0

나는 XSLT를 배우고 싶어한다. 저에게 가장 좋은 방법을 제안 해 주시겠습니까? 고맙습니다. – Srii

+0

절차 및/또는 객체 지향 언어 만 처리 한 적이 있다면 익숙해지는 데 시간이 걸리기 때문에 XSLT를 올바르게 배우려면 시간을 투자해야합니다. 고전적인 방법 : XSLT 입문서를 읽으십시오. 나는 내가 배운 것을 기억하지 못합니다. 당신이 IT 서적이있는 도서관을 이용할 수 있다면, 당신에게보기 좋은 것을보십시오. 이 책이 연습 문제를 제공하는 것이 중요하다고 생각합니다. –