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

XSLT 1.0多结果过滤问题:生成压力测试日志表格

嘿,兄弟!卡了一周搞XSLT 1.0的问题确实够闹心的——这老工具有时候就是倔得很,尤其涉及到非HTML的表格结构时。我来帮你搞定这个用下划线替代制表符的表格生成+过滤需求!

首先,我先假设你的XML大概是这种测试日志结构(如果实际结构不一样,你只需要调整XPath路径就行):

<TestLogs>
  <LogEntry>
    <Description>Process Log for Pressure Tests: Step 6 - Pressure Test #1</Description>
    <Status>Success</Status>
    <Duration>00:15:30</Duration>
  </LogEntry>
  <LogEntry>
    <Description>Process Log for Pressure Tests: Step 6 - Pressure Test #2</Description>
    <Status>Failed</Status>
    <Duration>00:12:10</Duration>
  </LogEntry>
</TestLogs>

基础版:生成带下划线分隔的文本表格

下面是能直接生成你要的[内容]__[截断状态]格式的XSLT 1.0代码,输出纯文本,完全避开HTML:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 输出纯文本,不要任何HTML标签 -->
  <xsl:output method="text" encoding="UTF-8"/>
  
  <!-- 定义列分隔符,这里用2个下划线,你可以随便改数量 -->
  <xsl:variable name="columnSeparator" select="'__'"/>

  <xsl:template match="/">
    <!-- 遍历日志条目,这里可以加过滤条件!比如只选成功的测试 -->
    <xsl:for-each select="TestLogs/LogEntry[Status='Success']">
      <!-- 输出第一列:完整描述 -->
      <xsl:value-of select="Description"/>
      <!-- 输出分隔符 -->
      <xsl:value-of select="$columnSeparator"/>
      <!-- 输出第二列:截断成你示例里的S...格式 -->
      <xsl:value-of select="concat(substring(Status, 1, 1), '...')"/>
      <!-- 换行,保证每行一条记录 -->
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

进阶版:让列对齐更美观

如果你想让列宽固定,比如第一列不管内容长短都占60个字符,不足的地方用下划线补全,那可以加个小模板来实现:

<?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" encoding="UTF-8"/>
  
  <xsl:template match="/">
    <xsl:for-each select="TestLogs/LogEntry">
      <!-- 调用补全模板,把描述补到60个字符,不够的加下划线 -->
      <xsl:call-template name="padToLength">
        <xsl:with-param name="text" select="Description"/>
        <xsl:with-param name="targetLength" select="60"/>
        <xsl:with-param name="padChar" select="'_'"/>
      </xsl:call-template>
      <!-- 加个空格分隔,然后输出截断的状态 -->
      <xsl:value-of select="concat(' ', substring(Status, 1, 1), '...')"/>
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>

  <!-- 递归补全字符串长度的模板 -->
  <xsl:template name="padToLength">
    <xsl:param name="text"/>
    <xsl:param name="targetLength"/>
    <xsl:param name="padChar"/>
    
    <xsl:value-of select="$text"/>
    <!-- 如果当前长度不够,继续补下划线 -->
    <xsl:if test="string-length($text) &lt; $targetLength">
      <xsl:call-template name="padToLength">
        <xsl:with-param name="text" select="concat($text, $padChar)"/>
        <xsl:with-param name="targetLength" select="$targetLength"/>
        <xsl:with-param name="padChar" select="$padChar"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

关键要点提醒

  • 过滤逻辑:在xsl:for-each的select里加XPath条件就行,比如[Status='Failed']只看失败的,或者[contains(Description, 'Step 6')]只选Step6的日志,完全根据你的需求来。
  • 分隔符调整:不管是基础版的$columnSeparator还是进阶版的补全模板,都可以随便改下划线的数量,适配你要的格式。
  • 纯文本输出:一定要把xsl:output的method设为text,这样就不会生成任何HTML标签,完全符合你的要求。

如果你的XML结构和我假设的不一样,或者还有更具体的过滤规则,直接把你的XML片段贴出来,我再帮你调整!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:33:20