我想加入两个没有唯一ID的节点。
我看到的示例需要一个唯一的ID或类似字段,但在我的情况下,这是不可能的。我想其他可能性存在,但我找不到它们。
这是来自SOAP服务器的XML响应:
<REGRI Y="2013" RD="2013-05-29" RN="47913">
<DTs>
<DT>
<D DD="2012-12-31" TC="BILANCIO ABBREVIATO D'ESERCIZIO">
<ADD TC="atto depositato" SD="2013-05-29"/>
</D>
</DT>
<DT>
<D DD="2013-04-29" TC="COMUNICAZIONE ELENCO SOCI">
<ADD TC="atto iscritto" ID="2013-05-30"/>
</D>
</DT>
</DTs>
<TMs>
<TM TC="B" TD="DEPOSITO DI BILANCI D'ESERCIZIO ED ELENCO DEI SOCI"/>
<TM TC="S" TD="ELENCO SOCI E TITOLARI DI DIRITTI SU AZIONI O QUOTE SOCIALI"/>
</TMs>
</REGRI>
这是我的代码:
<xsl:for-each select="p:AF/p:HI/p:REGsRI/p:REGRI">
<xsl:for-each select="p:DTs/p:DT">
<p><xsl:value-of select="p:D/@TC" /></p>
<p><xsl:value-of select="p:D/p:ADD/@TC" /></p>
<p><xsl:value-of select="p:D/p:ADD/@SD" /></p>
</xsl:for-each>
<xsl:for-each select="p:TMs/p:TM">
<xsl:value-of select="@TC" />-<xsl:value-of select="@TD" />
</xsl:for-each>
这是输出:
BILANCIO ABBREVIATO D'ESERCIZIO
atto depositato
2013-05-29
COMUNICAZIONE ELENCO SOCI
atto iscritto
2013-05-30
B-DEPOSITO DI BILANCI D'ESERCIZIO ED ELENCO DEI SOCI
S-ELENCO SOCI E TITOLARI DI DIRITTI SU AZIONI O QUOTE SOCIALI
我需要显示:
B-DEPOSITO DI BILANCI D'ESERCIZIO ED ELENCO DEI SOCI
BILANCIO ABBREVIATO D'ESERCIZIO
atto depositato
2013-05-29
S-ELENCO SOCI E TITOLARI DI DIRITTI SU AZIONI O QUOTE SOCIALI
COMUNICAZIONE ELENCO SOCI
atto iscritto
2013-05-30
请帮帮我! : - )
答案 0 :(得分:0)
如果“DT”中的“DT”元素位置与“TM”中的“TM”元素位置相同,则可以执行以下操作:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/REGRI">
<html>
<head></head>
<body>
<xsl:apply-templates select="TMs/TM"/>
</body>
</html>
</xsl:template>
<xsl:template match="TM">
<xsl:variable name="tm_pos" select="position()"/>
<p>
<xsl:value-of select="concat(@TC, '-', @TD)"/>
<br/>
<xsl:apply-templates select="../preceding-sibling::node()/DT[$tm_pos]"/>
</p>
</xsl:template>
<xsl:template match="DT">
<xsl:value-of select="D/@TC"/>
<br/>
<xsl:value-of select="D/ADD/@TC"/>
<br/>
<xsl:choose>
<xsl:when test="D/ADD/@SD">
<xsl:value-of select="D/ADD/@SD"/>
</xsl:when>
<xsl:when test="D/ADD/@ID">
<xsl:value-of select="D/ADD/@ID"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>N/A</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
您可以使用position()
:
<xsl:template match="p:REGRI">
<xsl:apply-templates select="p:TMs/p:TM" />
</xsl:template>
<xsl:template match="p:TM">
<xsl:variable name="currpos" select="position()" />
<xsl:variable name="D" select="ancestor::p:REGRI/p:DTs/p:DT[$currpos]/p:D" />
<p><xsl:value-of select="concat(@TC, '-', @TD)" /></p>
<p><xsl:value-of select="$D/@TC" /></p>
<p><xsl:value-of select="$D/p:ADD/@TC" /></p>
<p><xsl:value-of select="$D/p:ADD/@SD" /></p>
</xsl:template>
给出
<p>B-DEPOSITO DI BILANCI D'ESERCIZIO ED ELENCO DEI SOCI</p>
<p>BILANCIO ABBREVIATO D'ESERCIZIO</p>
<p>atto depositato</p>
<p>2013-05-29</p>
<p>S-ELENCO SOCI E TITOLARI DI DIRITTI SU AZIONI O QUOTE SOCIALI</p>
<p>COMUNICAZIONE ELENCO SOCI</p>
<p>atto iscritto</p>
<p>2013-05-30</p>