0
你好,我正试图测试我的当前节点是否与另一个节点匹配。这是我的xml:xslt测试/匹配当前节点与另一个节点
<top-level>
<ep-bulletin>
<SDOBI>
<B200>
<B210>R1</B210>
</B200>
<B400>
<B472>
<B475>
<date>20030221</date>
<ctry>GB</ctry>
<date>20030222</date>
<ctry>LU</ctry>
</B475>
</B472>
</B400>
<B800>
<B840>
<ctry>DE</ctry>
<ctry>FR</ctry>
<ctry>GB</ctry>
<ctry>IT</ctry>
<ctry>LU</ctry>
<ctry>SE</ctry>
</B840>
</B800>
</SDOBI>
</ep-bulletin>
<ep-bulletin>
<SDOBI>
<B200>
<B210>R2</B210>
</B200>
<B400>
<B472>
<B475>
<date>20040609</date>
<ctry>AT</ctry>
<date>20110630</date>
<ctry>BE</ctry>
<date>20110630</date>
<ctry>CH</ctry>
<date>20120103</date>
<ctry>DE</ctry>
<date>20110630</date>
<ctry>DK</ctry>
<date>20110630</date>
<ctry>FR</ctry>
<date>20110612</date>
<ctry>GB</ctry>
<date>20110612</date>
<ctry>IT</ctry>
<date>20110630</date>
<ctry>LI</ctry>
<date>20120101</date>
<ctry>NL</ctry>
<date>20110613</date>
<ctry>SE</ctry>
</B475>
</B472>
</B400>
<B800>
<B840>
<ctry>AT</ctry>
<ctry>BE</ctry>
<ctry>CH</ctry>
<ctry>DE</ctry>
<ctry>DK</ctry>
<ctry>ES</ctry>
<ctry>FR</ctry>
<ctry>GB</ctry>
<ctry>IT</ctry>
<ctry>LI</ctry>
<ctry>NL</ctry>
<ctry>SE</ctry>
</B840>
</B800>
</SDOBI>
</ep-bulletin>
</top-level>
我想能够检查B800/B840/CTRY是否包含在B400/B475/CTRY。我希望获得的输出是一个表,其中第一列包含记录标识,第二列包含我当前的节点,第三列包含匹配节点之前的节点B475 /日期(|〜|是文本标识符;分离器)。
|~|R1|~|;|~|DE|~|;|~||~|
|~|R1|~|;|~|FR|~|;|~||~|
|~|R1|~|;|~|GB|~|;|~|20030221|~|
|~|R1|~|;|~|IT|~|;|~||~|
|~|R1|~|;|~|LU|~|;|~|20030222|~|
|~|R1|~|;|~|SE|~|;|~||~|
|~|R2|~|;|~|AT|~|;|~|20040609|~|
|~|R2|~|;|~|BE|~|;|~|20110630|~|
|~|R2|~|;|~|CH|~|;|~|20110630|~|
|~|R2|~|;|~|DE|~|;|~|20120103|~|
|~|R2|~|;|~|DK|~|;|~|20110630|~|
|~|R2|~|;|~|ES|~|;|~||~|
|~|R2|~|;|~|FR|~|;|~|20110630|~|
|~|R2|~|;|~|GB|~|;|~|20110612|~|
|~|R2|~|;|~|IT|~|;|~|20110612|~|
|~|R2|~|;|~|LI|~|;|~|20110630|~|
|~|R2|~|;|~|NL|~|;|~|20120101|~|
|~|R2|~|;|~|SE|~|;|~|20110613|~|
这是我写的xslt代码,但我无法获取最后一列。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="/">
<xsl:text> </xsl:text>
<xsl:for-each select="top-level/ep-bulletin/SDOBI/B800/B840/ctry">
<xsl:text>|~|</xsl:text>
<xsl:value-of select="../../../B200/B210"/>
<xsl:text>|~|;|~|</xsl:text>
<xsl:value-of select="."/>
<xsl:text>|~|;|~|</xsl:text>
<xsl:choose>
<xsl:when test=".=child::B475">
<xsl:value-of select="../../../preceding::B475/ctry"/>
</xsl:when>
<xsl:otherwise >
<xsl:value-of select="">
</xsl:otherwise>
</xsl:choose>
<xsl:text>|~|</xsl:text>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
非常感谢您的帮助。
非常感谢伊恩!它完美的工作! – user2406147