我们有一个格式如下所示的 XML 文件。
<toploop id="iamroot">
<firstinner>
<inner1 Sequence="001">
<Number>321</Number>
</inner1>
<inner1 Sequence="002">
<Number>345</Number>
</inner1>
</firstinner>
<secondinner>
<inner2 Sequence="001">
<Number>321</Number>
<secondNumber>189</secondNumber>
</inner2>
<inner2 Sequence="002">
<Number>345</Number>
<secondNumber>998</secondNumber>
</inner2>
</secondinner>
</toploop>
我已经尝试了很多东西,但是对于 XSLT/XPath 来说是新手,我无法获得一个查询来表示如下所示的数据。
iamroot,001,321,189
iamroot,002,345,998
如您所见,我想检查 firstinner 标签的 inner1 序列,number 是否与 secondinner 标签的 inner2 序列匹配,然后将 secondinner 标签的 inner2 的 secondNumber 标记值拉到这些旁边。就像 SQL 中的两个表内连接一样。我们可以在 XSLT 中做到这一点吗?我正在尝试值匹配,但我不知道如何匹配同一个 XML 文件中的数据。请帮忙。提前致谢。我也在使用 Xalan-C。
更新:感谢 Kay 和 LarsH。我尝试了以下脚本。
<?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" />
<xsl:template match="inner2" />
<xsl:template match="inner1">
<xsl:variable name="inner2" select="../../secondinner/inner2[Number = current()/Number and @Sequence = current()/@Sequence]"/>
<xsl:if test="$inner2">
<xsl:value-of select="concat(/toploop/@id, ',', /toploop/firstinner/inner1/@Sequence, ',', /toploop/firstinner/inner1/Number, ',', $inner2/secondNumber, ',')" />
</xsl:if>
</xsl:template>
</xsl:stylesheet>
它给出如下输出。
iamroot,001,321,189,
iamroot,002,345,998,
如何使这种格式如下所示,在记录之前没有前导空格以及数据行上方和下方的不必要行。
iamroot,001,321,189,
iamroot,002,345,998,
再次感谢。