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

XSL属性值转义问题求助:如何根据wiki元素生成HTML链接

问题分析与解决方案

你遇到的核心问题是在XSL中直接将<xsl:value-of>嵌入HTML属性值里,这违反了XML的语法规则——XML属性值中不能包含未转义的<字符。除此之外,你的XSL代码里还有一个结构错误:第二个<td>标签被放在了<tr>标签外面,这会导致生成的HTML结构不合法。

修正后的XSL代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <table>
      <tr>
        <th>Name</th>
        <th>Address</th>
      </tr>
      <xsl:for-each select="bases/marker">
      <xsl:sort select="name" />
        <tr>
          <td>
            <!-- 使用属性值模板(大括号{})来动态生成href属性 -->
            <xsl:if test="wiki">
                <a href="https://en.wikipedia.com/wiki/{wiki}">
                    <xsl:value-of select="name"/>
                </a>
            </xsl:if>
            <!-- 当没有wiki元素时,直接输出名称 -->
            <xsl:if test="not(wiki)">
                <xsl:value-of select="name"/>
            </xsl:if>
          </td>
          <td><xsl:value-of select="adr"/>, <xsl:value-of select="state"/></td>
        </tr>
      </xsl:for-each>
    </table>
</xsl:template>
</xsl:stylesheet>

关键修正点说明

  1. 属性值模板替代直接嵌入<xsl:value-of>
    在XSLT中,要动态设置HTML属性值,应该使用属性值模板(用{}包裹XPath表达式),比如href="https://en.wikipedia.com/wiki/{wiki}",这样XSL处理器会自动计算wiki节点的值并插入到属性中,避免了XML语法错误。

  2. 修正HTML结构错误
    你原来的代码里把第二个<td>放在了<tr>外面,这会导致生成的HTML表格结构混乱,修正后将其移到<tr>内部,保证每个<tr>包含对应的<td>。

  3. 优化条件判断逻辑
    原来的test="wiki != ''"可以简化为test="wiki"(判断节点是否存在),用not(wiki)判断节点不存在,逻辑更清晰。

生成的正确HTML输出

对于你的XML输入,会生成如下合法的HTML:

<table>
  <tr>
    <th>Name</th>
    <th>Address</th>
  </tr>
  <tr>
    <td><a href="https://en.wikipedia.com/wiki/Link_1">Sample 1</a></td>
    <td>Boston, Mass</td>
  </tr>
  <tr>
    <td>Sample 2</td>
    <td>Essex, Vermont</td>
  </tr>
</table>

内容的提问来源于stack exchange,提问作者Ed S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:35:41