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

XPath 1.0重复数据透视求助:按MEREMK合并行转多列

解决XPath 1.0中按MEREMK分组透视测试数据的问题

问题背景

同一MEREMK(序列号)的测试数据分散在多个<Custom>节点中,需要将数据透视转换为每行对应一个唯一MEREMK,测试类型(如VISUAL、DIELECTRIC)作为列展示对应的M8RVAL值。此前使用的XPath表达式会返回全局第一个符合测试类型条件的M8RVAL,而非当前MEREMK的对应值。

示例XML

<Root>
  <Custom>
    <MEREMK>111222333</MEREMK>
    <PJTX15>VISUAL</PJTX15>
    <M8RVAL>Pass1</M8RVAL>
  </Custom>
  <Custom>
    <MEREMK>111222333</MEREMK>
    <PJTX15>DIELECTRIC</PJTX15>
    <M8RVAL>Fail1</M8RVAL>
  </Custom>
  <Custom>
    <MEREMK>222333444</MEREMK>
    <PJTX15>VISUAL</PJTX15>
    <M8RVAL>Pass2</M8RVAL>
  </Custom>
  <Custom>
    <MEREMK>222333444</MEREMK>
    <PJTX15>DIELECTRIC</PJTX15>
    <M8RVAL>Pass3</M8RVAL>
  </Custom>
</Root>

解决方案

1. 纯XPath精准查询(针对单个MEREMK)

要获取指定MEREMK的对应测试类型值,必须限定查询范围在当前MEREMK的<Custom>节点集合内,避免全局匹配:

  • 获取MEREMK111222333的VISUAL测试值:
    //Custom[MEREMK='111222333' and PJTX15='VISUAL']/M8RVAL/text()
    
  • 获取MEREMK222333444的DIELECTRIC测试值:
    //Custom[MEREMK='222333444' and PJTX15='DIELECTRIC']/M8RVAL/text()
    

2. XSLT 1.0实现分组透视(生成目标表格结构)

纯XPath 1.0无法直接完成分组和表格输出,需结合XSLT的分组功能实现:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 定义分组键,按MEREMK分组所有Custom节点 -->
  <xsl:key name="meremk-group" match="Custom" use="MEREMK"/>

  <xsl:template match="/">
    <table>
      <!-- 表头 -->
      <tr>
        <th>MEREMK</th>
        <th>VISUAL</th>
        <th>DIELECTRIC</th>
      </tr>
      <!-- 遍历每个唯一MEREMK的分组(去重) -->
      <xsl:for-each select="Root/Custom[generate-id() = generate-id(key('meremk-group', MEREMK)[1])]">
        <tr>
          <td><xsl:value-of select="MEREMK"/></td>
          <!-- 提取当前分组下VISUAL对应的M8RVAL -->
          <td><xsl:value-of select="key('meremk-group', MEREMK)[PJTX15='VISUAL']/M8RVAL"/></td>
          <!-- 提取当前分组下DIELECTRIC对应的M8RVAL -->
          <td><xsl:value-of select="key('meremk-group', MEREMK)[PJTX15='DIELECTRIC']/M8RVAL"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>

该方案通过<xsl:key>建立MEREMK分组,用generate-id()确保每个MEREMK只处理一次,再从分组内精准匹配对应测试类型的M8RVAL值,最终生成目标行列结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:22:45