2017-12-13 7 views
0

안녕하세요 저는 비슷한 출력을 줄 때 원하는 출력을 얻을 필요가있는 xslt를 작성하려고합니다. 만약 당신이 그 출력은 그 XML에있는 요소의 발생을 기반으로 ID를 가지고 관찰. 지금까지 내 xslt에서 나는 위치에 따라 그것을하고있다. 하지만 입력 XML로부터 매번 카운트를 중단하고 다시 시작합니다. 이것이 성취 될 수 있는가?입력 요소의 출현을 기준으로 출력의 요소 값을 증가 시키십시오.

갱신 :

입력에 좀 더 세부 사항을 추가. 보시다시피 나는 수준 아래에 추가하고는 각각의 데이터

입력 XML

<lines> 
    <line> 
     <po-num>text1</ponum> 
     <accountings> 
      <accounting> 
       <account> 
        <seg1>value1</seg1> 
       </account> 
      </accounting> 
      <accounting> 
       <account> 
        <seg1>value2</seg1> 
       </account> 
      </accounting> 
     </accountings> 
    </line> 
    <line> 
     <po-num>text2</ponum> 
     <accountings> 
      <accounting> 
       <account> 
        <seg1>value3</seg1> 
       </account> 
      </accounting> 
     </accountings> 
    </line> 
    <line> 
     <po-num>text3</ponum> 
     <account> 
      <seg1>value4</seg1> 
     </account> 
    </line> 
</lines> 

원하는 출력 XML

<Item> 
    <id>1</id> 
    <po-num>text1</ponum> 
    <seg>value1</seg> 
</Item> 
<Item> 
    <id>2</id> 
    <po-num>text1</ponum> 
    <seg>value2</seg> 
</Item> 
<Item> 
    <id>3</id> 
    <po-num>text2</ponum> 
    <seg>value3</seg> 
</Item> 
<Item> 
    <id>4</id> 
    <po-num>text3</ponum> 
    <seg>value4</seg> 
</Item> 

XSLT I 모두에 채워 져야합니다 Rupesh가 제공 한 xslt를 사용하고 있습니다.

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

    <xsl:for-each select="//account"> 
     <item> 
      <id><xsl:value-of select="position()"/></id> 
      <po-num><xsl:value-of select="../../../*:po-num"/></po-num> 
      <seg><xsl:value-of select="./*:seg1"></xsl:value-of></seg> 
     </item> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 
+2

의 변화를 볼 수 있습니까? 죄송하지만 StackOverflow는 사람들이 기존 프로그래밍 코드를 수정하도록 돕는 것입니다. 자습서, 연구, 도구, 권장 사항, 라이브러리 및 무료 코드에 대한 요청은 주제와 관련이 없습니다. *** ***을 읽어보십시오. https://stackoverflow.com/help/on-topic, https://stackoverflow.com/help/how-to-ask, https://stackoverflow.com/help/dont- 여기에 Q를 게시하기 전에 https://stackoverflow.com/help/mcve를 방문하여 [둘러보기] (https://stackoverflow.com/tour)를 방문하십시오. 행운을 빕니다. – shellter

+0

안녕하세요, 실제 코드를 여러 가지 이유로 공유 할 수 없습니다. 위의 샘플 입력을 지원하는 샘플 XSLT 코드를 만들어 보겠습니다. 코드의 방대한 부분. 위의 상황은 그 안에 작은 모듈입니다. –

답변

3

이 시도 :

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

     <xsl:for-each select="//seg1"> 
      <item> 
       <id><xsl:value-of select="position()"/></id> 
       <seg><xsl:value-of select="."></xsl:value-of></seg> 
      </item> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

당신이 시도 무엇 http://xsltransform.hikmatu.com/jyyiVhm

+0

대단히 고맙습니다. 이것은 매력처럼 작동하며 내 코드를 최적화합니다. XSLT에 익숙하지 않은 나는 몇 가지 분명한 사실을 놓치고있다. –

관련 문제