这个源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>