You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历多XML文件并将关联属性值写入HTML表格行?

问题分析与解决方案

看起来你在处理多XML文件生成HTML表格时,主要问题在于没有正确关联当前review的rid和对应的date属性,同时代码里还有一些变量赋值和结构上的小问题。咱们一步步来修正:

核心问题点

  1. $currentRid变量赋值错误:你在遍历distinct-values($files/review/@rid)时,内部又重新取了所有rid的去重值,这会导致变量指向所有rid,而不是当前循环的那个特定rid。
  2. Date值获取逻辑错误:你遍历了所有review的date去重值,这会把所有日期都输出到同一个单元格,而不是当前review对应的日期。
  3. $currentPid的冗余与不明确:每个review下有多个<pc>节点,但你的期望输出是每个review对应一行表格,需要明确指定取哪个pc的result(比如固定取pc_001,或者处理所有pc?这里按你的示例输出默认取固定pid的)。
  4. HTML结构错误:原代码里</xsl:if>后面多了一个</tr>,会破坏表格的闭合结构。

修正后的XSLT代码

<xsl:variable name="files" select="collection('../?select=*.xml')"/>
<xsl:template match="/">
    <!-- @pid value outside the table as header. -->
    <table>
        <tr>
            <td>Review ID</td>
            <td>Date</td>
            <td>Result</td>
        </tr>
        <xsl:if test="$files">
            <!-- 直接遍历每个review节点,避免关联错误 -->
            <xsl:for-each select="$files/review">
                <tr>
                    <td>
                        <!-- 提取rid中的数字部分,比如把id_001转为001 -->
                        <xsl:value-of select="substring-after(@rid, 'id_')"/>
                    </td>
                    <td>
                        <!-- 直接获取当前review的date属性 -->
                        <xsl:value-of select="@date"/>
                    </td>
                    <td>
                        <!-- 这里指定取pid为pc_001的result,可根据需求修改 -->
                        <xsl:value-of select="pc[@pid='pc_001']/result"/>
                    </td>
                </tr>
            </xsl:for-each>
        </xsl:if>
    </table>
</xsl:template>

关键修改说明

  • 遍历对象调整:直接遍历$files/review而非distinct-values($files/review/@rid),这样每个循环都对应一个完整的<review>节点,能直接获取它的所有属性和子节点,彻底避免关联错误。
  • Date值正确获取:现在直接用@date就能拿到当前review的日期,不需要额外循环。
  • Review ID格式化:用substring-after(@rid, 'id_')把id_001转换成你期望的001,如果不需要格式化,直接用@rid即可。
  • Result节点指定:明确指定取pc[@pid='pc_001']/result,如果需要显示多个pc的结果,可以改成循环遍历<pc>节点,或者用string-join把多个结果拼接成字符串。
  • 修复结构错误:移除了多余的</tr>,保证HTML表格结构完全正确。

验证输出

用你提供的两个XML文件作为输入,运行修正后的XSLT,会生成完全符合你期望的HTML表格:

<!-- @pid value outside the table as header. -->
<table>
    <tr>
        <td>Review ID</td>
        <td>Date</td>
        <td>Result</td>
    </tr>
    <tr>
        <td>001</td>
        <td>2018-03-20</td>
        <td>...</td>
    </tr>
    <tr>
        <td>002</td>
        <td>2018-05-19</td>
        <td>...</td>
    </tr>
</table>

内容的提问来源于stack exchange,提问作者Aguanile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:17:20