XSL运算符与筛选语法详解及数据提取实例

Hazel
Hazel
发布时间:2026-10-15| 7人浏览过
原创

XSL/XPath提供了丰富的路径查找与数据过滤手段。掌握表意清晰的运算符与内置比较符号,能够高效从复杂嵌套的XML文档中精准定位目标节点并进行格式化输出。

核心导航与特殊字符

在构建XSL模板时,正确解析路径是处理数据的第一步。下表梳理了常用的元素访问标识及其作用范围:

  • /:选择子元素,返回左侧元素的直接子节点;位于最左侧时表示从根节点开始匹配。
  • //:递归下降操作符。无论层级多深,均可搜索指定的元素;置于最左端表示从根节点出发向下全量检索。
  • .:代表当前所在的上下文节点(当前元素)。
  • *:通配符,用于匹配任意名字的元素。
  • @:属性前缀,用于选取元素的特定属性值(如 @id)。
  • @*:通配符,匹配任意名称的属性。
  • ::命名空间分隔符,用于隔离前缀定义与具体的元素或属性名。

逻辑与关系比较运算符

XSL不仅支持基础的路径跳转,还允许通过逻辑表达式和数值对比来对数据进行二次过滤。常见的布尔判定方式如下:

  • and / &&:逻辑“与”,要求两侧条件同时成立。
  • or / ||:逻辑“或”,满足任一条件即成立。
  • not():逻辑“非”,取反指定条件的结果。

在进行数据清洗或排序前,常需使用不等式进行大小比对。由于HTML解析器可能对部分符号转义敏感,以下列出了标准符号与其文本形式对照表:

  1. 基础比较: 使用 = (或 $eq$) 判定相等,用 != (或 $ne$) 判定不等。若涉及字符串比较且无需区分大小写,分别使用 $ieq$ 与 $ine$。
  2. 大小关系: 小于 (< 或 $lt$)、大于 (> 或 $gt$)。如需忽略大小写执行此比较,请使用对应的 $ilt$ 和 $igt$ 变体。同理可延伸出小于等于 ($le$/$ile$) 与大于等于 ($ge$/$ige$) 的操作。

第1步:利用集合函数实现复杂筛选

在真实业务场景下,XML节点往往存在一对多的嵌套结构。例如,一个简历节点可能包含多项独立的技能标签。

  • $all$:当且仅当集合中所有项目均满足判定条件时,返回真。
  • $any$:只要集合中存在任意一项项目满足条件,即返回真。
  • |:返回两个集合数据的并集。
  • []:应用过滤样式或指定下标索引。

基于XML的实战提取案例

假设存在一份个人简历数据库结构如下(每个resume节点内有多条skill记录):

<document>
  <resume>
    <name>姓名</name>
    <E-Mail>邮箱</E-Mail>
    <birthday>生日(yyyy/mm/dd)</birthday>
    <skill>WEB开发</skill>
    <skill>Photoshop</skill>
  </resume>
</document>

示例一:按特定技能匹配人员信息

目标:获取所有具备"WEB开发"技能候选人的姓名及邮件地址。

<TABLE border="1">
  <TH>姓名</TH><TH>E-Mail</TH>
  <xsl:for-each select="resume[$any$skill='WEB开发']">
    <TR>
      <TD><xsl:value-of select="name"/></TD>
      <TD><xsl:value-of select="E-Mail"/></TD>
    </TR>
  </xsl:for-each>
</TABLE>
核心说明:[]括号内即为过滤器。使用$any$确保即便该候选人掌握多项技能,只要其中有一项命中目标,该简历整体便会被纳入展示范围。

示例二:基于日期区间筛选并合并输出技能清单

目标:找出1977年1月1日之前出生的求职者,展示其基本信息及全部已学技能。

<TABLE border="1" cellspacing="0">
  <TH>姓名</TH><TH>技能列表</TH><TH>E-Mail</TH>
  <xsl:for-each select="resume[birthday $lt$ '1977/1/1']">
    <TR>
      <TD><xsl:value-of select="name"/></TD>
      <TD>
        <xsl:value-of select="skill[0]"/> 
        <xsl:for-each select="skill[index()>0]">
          、<xsl:value-of select="."/>
        </xsl:for-each>
      </TD>
      <TD><xsl:value-of select="E-Mail"/></TD>
    </TR>
  </xsl:for-each>
</TABLE>

步骤拆解:

  1. 主节点过滤:birthday $lt$ '1977/1/1' 利用文本符号完成日期大小比对。
  2. 首项提取:skill[0] 负责显示第一条技能记录。
  3. 后续循环拼接:skill[index()>0] 遍历除第一项以外的其余技能,通过插入顿号连接成串。

以上就是XSL运算符与筛选语法的详细内容,更多关于XML数据处理及模板编写的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。