Xslt 1.0 如果一个节点中的元素值为 true,则从同一节点获取另一个元素的值



这个源XML是大版本的简短版本。在第一个节点中为空,但在下一个节点中具有值。我想生成一个 XML 文件以在输出 XML 的标记中显示 的值。对于整个源 XML 文件和输出 XML,此值将保持不变。

源 XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
   <companyCode>002</companyCode>
   <transportation>
      <express>
         <revenue>
            <rateSourceCode></rateSourceCode>
         </revenue>
      </express>
   </transportation>      
   <transportation>
      <express>
         <revenue>
            <rateSourceCode>REBS</rateSourceCode>
         </revenue>
      </express>
   </transportation>
   <transportation>
      <express>
         <revenue>
            <rateSourceCode>REBS</rateSourceCode>
         </revenue>
      </express>
   </transportation>
   <system>     
      <engineName>OR</engineName>    
      <activityCc>1000</activityCc>
      <transactionName>RB</transactionName>
   </system>
   <system>    
      <engineName>OB</engineName>
      <activityCc>1001</activityCc>
      <transactionName>RI</transactionName>
   </system>
</root>

我尝试使用 for-each 循环,但它会多次打印标签,但我只需要一次。有没有办法使用带有中断语句的 for-each 循环,所以如果我使用 if 条件并且它满足条件,然后不多次打印行。

预期产出:

<?xml version="1.0" encoding="UTF-8"?>
<Delivery class="entity">
    <top>REBS</top>
    <System class="entity">
        <a>OR</a>
        <b>1000</b>
        <c>RB</c>
    </System>
    <System class="entity">
        <a>OB</a>
        <b>1001</b>
        <c>RI</c>
    </System>
</Delivery>

请尝试以下操作。

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="utf-8" indent="yes"/>
    <xsl:template match="/root">
        <Delivery class="entity">
            <top>
                <xsl:value-of select="(transportation/express/revenue/rateSourceCode[. != ''])[1]"/>
            </top>
            <xsl:for-each select="system">
                <System class="entity">
                    <a><xsl:value-of select="engineName"/></a>
                    <b><xsl:value-of select="activityCc"/></b>
                    <c><xsl:value-of select="transactionName"/></c>
                </System>
            </xsl:for-each>
        </Delivery>
    </xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新