XSLT xsl:value-of 元素

XSLT <xsl:value-of> 元素最全详解(2025 年最新实用版)

<xsl:value-of> 是 XSLT 中使用频率最高的指令,作用只有一个:
取值 → 输出为文本

一、基本语法(99% 的场景就这两种写法)

<!-- 写法1:最常见(推荐) -->
<xsl:value-of select="xpath-表达式"/>

<!-- 写法2:XSLT 2.0+,可以加 separator(处理多个节点时超好用) -->
<xsl:value-of select="xpath-表达式" separator=", "/>

二、核心属性速查表

属性是否必须说明常见用法示例
select必须XPath 表达式,决定取哪个节点的值select="title"select="@id"select="."
separator可选当 select 选中多个节点时,中间用什么分隔separator=", "separator="&#10;"(换行)
disable-output-escaping可选是否允许输出原始 HTML 标签(慎用!)disable-output-escaping="yes"

三、10 个最常见的真实用法(直接复制就能用)

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- 1. 输出当前节点的文本(最常用) -->
  <xsl:value-of select="title"/>

  <!-- 2. 输出属性值 -->
  <xsl:value-of select="@id"/>
  <xsl:value-of select="book/@price"/>

  <!-- 3. 输出当前节点本身(. 代表当前上下文) -->
  <xsl:value-of select="."/>

  <!-- 4. 输出根节点某个值(不管当前在哪) -->
  <xsl:value-of select="//site-name"/>   <!-- 全局查找 -->

  <!-- 5. 拼接多个值(XSLT 1.0 经典做法) -->
  <xsl:value-of select="first-name"/>
  <xsl:text> </xsl:text>
  <xsl:value-of select="last-name"/>

  <!-- 6. XSLT 2.0+ 一行拼接(超爽!) -->
  <xsl:value-of select="first-name, ' ', last-name"/>

  <!-- 7. 多个节点用分隔符合并(神级技巧) -->
  <xsl:value-of select="//book/title" separator=" | "/>
  <!-- 输出:围城 | 三体 | 平凡的世界 -->

  <!-- 8. 换行输出(生成 CSV、列表必备) -->
  <xsl:value-of select="title" separator="&#10;"/>

  <!-- 9. 输出 HTML 标签不被转义(慎用,仅在可信内容时) -->
  <xsl:value-of select="content" disable-output-escaping="yes"/>
  <!-- 比如 content 里存的是 <b>加粗</b>,就会真的显示加粗 -->

  <!-- 10. 安全做法:先转义再输出(推荐) -->
  <xsl:value-of select="content" disable-output-escaping="no"/>
  <!-- 或者直接用 <xsl:copy-of> 输出元素 -->

</xsl:stylesheet>

四、常见误区 vs 正确姿势

你想干的事错误写法正确写法说明
输出一整段 HTML<xsl:value-of select="div"/><xsl:copy-of select="div"/><xsl:apply-templates select="div"/>value-of 只取文本,标签会被吃掉
想输出 <br/> 换行<xsl:value-of select="'<br/>'"/><xsl:value-of select="'&lt;br/&gt;'" disable-output-escaping="yes"/> 或直接写 <br/>更推荐直接写 HTML 标签
想把多个作者用逗号连接一个个 value-of + text<xsl:value-of select="author" separator=", "/>XSLT 2.0+ 专属降维打击

五、与类似指令的终极对比表(背会它你就精通了)

指令输出内容会输出标签吗?适合场景
<xsl:value-of>只输出文本(拼接后)不会取 title、price、@id 等纯文本
<xsl:copy-of>完整复制节点(含标签)输出富文本 HTML、复制整个节点
<xsl:apply-templates>交给其他模板处理看模板怎么写复杂结构、需要递归处理
<xsl:text>原样输出固定文本插入空格、换行、特殊符号

六、一句话总结

<xsl:value-of select="xxx"/> = JavaScript 里的 innerText = xxx
你想把某个节点的内容“作为纯文本打印出来”,99% 的情况就用它!

七、30 秒实战挑战

把下面这个 XML 变成:
《围城》 - 钱钟书, 《三体》 - 刘慈欣

<library>
  <book><title>围城</title><author>钱钟书</author></book>
  <book><title>三体</title><author>刘慈欣</author></book>
</library>

答案(一行搞定,XSLT 2.0+):

<xsl:value-of select="library/book" separator=" &amp; 《, 》 - ">
  <xsl:value-of select="title"/>
  <xsl:text>》 - </xsl:text>
  <xsl:value-of select="author"/>
</xsl:value-of>

需要我现在帮你用 <xsl:value-of> 实现任何效果(拼接、格式化金额、生成 CSV 行、JSON 字段等),直接甩 XML 过来,10 秒出成品!

文章已创建 2732

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部