0

私はこのXML入力を持っています

<?xml version="1.0" encoding="utf-8"?>
<Document>
  <TopLevel>
    <Header>
      <!-- Header Information-->
    </Header>
    <!--Payments is a one to many-->
    <Payments>
      <PaymentID>PID1</PaymentID>
      <!--More Info-->
      <!--Transactrion can be one to many for each payment-->
      <Transaction>
        <TranssID>TR1 - PID1</TranssID>
        <TranssID>TR2 - PID1</TranssID>
        <!--More Info-->
      </Transaction>
    </Payments>
    <Payments>
      <PaymentID>PID2</PaymentID>
      <!--More Info-->
      <!--Transactrion can be one to many for each payment-->
      <Transaction>
        <TranssID>TR1 - PID2</TranssID>
        <TranssID>TR2 - PID2</TranssID>
        <!--More Info-->
      </Transaction>
    </Payments>
  </TopLevel>
</Document>

そして、ここに私のXSLTがあります

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

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <TopLevel>
      <xsl:apply-templates select="Document/TopLevel/Payments"/>
    </TopLevel>
  </xsl:template>

  <xsl:template match="Payments">
    <Payments>
      <PaymentID>
        <xsl:value-of select="PaymentID"/>
      </PaymentID>
      <ExtraColumn>
        <xsl:value-of select ="'ISO'" />
      </ExtraColumn>
      <xsl:apply-templates select="Transaction"/>
    </Payments>
  </xsl:template>

  <xsl:template match="Transaction">
    <xsl:apply-templates select="TranssID"/>
  </xsl:template>

  <xsl:template match="TranssID">
    <transIDs>
      <xsl:value-of select="."/>
    </transIDs>
  </xsl:template>

</xsl:stylesheet>

この出力を作成する

<?xml version="1.0" encoding="utf-8"?>
<TopLevel>
  <Payments>
    <PaymentID>PID1</PaymentID>
    <ExtraColumn>ISO</ExtraColumn>
    <transIDs>TR1 - PID1</transIDs>
    <transIDs>TR2 - PID1</transIDs>
  </Payments>
  <Payments>
    <PaymentID>PID2</PaymentID>
    <ExtraColumn>ISO</ExtraColumn>
    <transIDs>TR1 - PID2</transIDs>
    <transIDs>TR2 - PID2</transIDs>
  </Payments>
</TopLevel>

ここでの問題は、最初の支払いブロックに ExtraColumn を表示するだけでよく、後続の支払いブロックには表示しないことです。

それを行う方法についてのアイデアはありますか?

4

2 に答える 2

0

それ以外の

  <xsl:template match="Payments">
    <Payments>
      <PaymentID>
        <xsl:value-of select="PaymentID"/>
      </PaymentID>
      <ExtraColumn>
        <xsl:value-of select ="'ISO'" />
      </ExtraColumn>
      <xsl:apply-templates select="Transaction"/>
    </Payments>
  </xsl:template>

使用する

  <xsl:template match="Payments[1]">
    <Payments>
      <PaymentID>
        <xsl:value-of select="PaymentID"/>
      </PaymentID>
      <ExtraColumn>
        <xsl:value-of select ="'ISO'" />
      </ExtraColumn>
      <xsl:apply-templates select="Transaction"/>
    </Payments>
  </xsl:template>

  <xsl:template match="Payments[position() &gt; 1]">
    <Payments>
      <PaymentID>
        <xsl:value-of select="PaymentID"/>
      </PaymentID>

      <xsl:apply-templates select="Transaction"/>
    </Payments>
  </xsl:template>
于 2013-09-09T08:20:53.413 に答える
0

私は以下の正しい答えを得ました

  <xsl:template match="Payments">
    <Payments>
      <PaymentID>
        <xsl:value-of select="PaymentID"/>
      </PaymentID>
      <xsl:if test="position()=1">
        <ExtraColumn>
          <xsl:value-of select ="'ISO'" />
        </ExtraColumn>
      </xsl:if>
      <xsl:apply-templates select="Transaction"/>
    </Payments>
  </xsl:template>
于 2013-09-09T09:44:50.633 に答える