使用 XSLT 3 和 SaxonC 自动识别并包装 XML 中的软件名称

发布时间 - 2026-01-31 00:00:00    点击率:

本文介绍如何利用 xslt 3 的高级文本处理能力(配合 python 的 `saxonche` 库),精准定位 xml `

` 标签内嵌套 `

` 等子元素时的软件名称,并基于 json 提供的上下文与偏移信息,将其安全包裹在 `` 标签中,避免破坏原有结构。

在科研文献或技术文档的 XML 标注任务中,常需从混合内容(mixed content)的

段落中识别特定软件名称(如 MODELLER、PROSA),并为其添加语义化标签(如 )。难点在于:这些名称往往夹杂在纯文本与内联子元素(如 )之间,传统正则替换或简单 DOM 遍历极易误伤结构或错位匹配。

推荐方案是采用 XSLT 3 + SaxonC —— 这一组合支持原生 JSON 解析、高阶迭代(xsl:iterate)、文本分析(analyze-string)及隧道参数(tunnel parameters),能完美应对“上下文驱动”的精准定位需求。

以下是一个可直接运行的完整流程:

✅ 步骤 1:安装依赖

pip install saxonche

✅ 步骤 2:准备 XSLT 脚本(wrap-software.xsl)




  
  
    
      
      
      
      
        
          
            
          
        
        
          
        
      
    
  

  
  

  
  
    
    
      
      
        
      
      
        
      
    
  

  
  
    {.}
  

  
  
  

  
  
? 说明:json-doc('software-mentions.json') 会自动解析 JSON 文件;若需调试,也可将 JSON 内联为 [...] 并改用 parse-json($json-data)。

✅ 步骤 3:Python 调用示例

from saxonche import PySaxonProcessor

# 输入 XML 和 XSLT 路径
xml_file = "input.xml"
xslt_file = "wrap-software.xsl"

with PySaxonProcessor() as proc:
    xslt_proc = proc.new_xslt30_processor()
    # 执行转换
    output = xslt_proc.transform_to_string(
        source_file=xml_file,
        stylesheet_file=xslt_file
    )
    print(output)

⚠️ 注意事项

  • 上下文匹配优先级:XSLT 先验证整个

    是否包含 context 字符串,再在匹配的文本节点中查找 normalizedForm,确保不跨句误包(例如避免将 MODEL 错包为 MODELLER 的子串)。

  • 嵌套安全:xsl:iterate 逐个应用软件规则,且 mode="process" 严格作用于 text() 节点,完全保留 等子元素结构。
  • 大小写敏感:默认区分大小写;如需忽略,可将 contains() 替换为 matches(., concat('\b', $software?software-name?normalizedForm, '\b'), 'i')。
  • 性能提示:对于超大 XML,建议预筛选

    标签(如先用 lxml 提取含关键词的段落再交由 XSLT 处理)。

该方法以声明式逻辑替代脆弱的手动 DOM 操作,兼具准确性、可维护性与扩展性——未来新增软件只需更新 JSON,无需修改代码。


# python  # js  # json  # app  # ai  # String  # xml  # 字符串  # dom  # 关键词  # 遍历  # 可将  # 是一个  # 这一  # 只需  # 将其  # 为其  # 可直接  # 如需 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  JavaScript如何实现音频处理_Web Audio API如何工作?  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Android Socket接口实现即时通讯实例代码  济南网站建设制作公司,室内设计网站一般都有哪些功能?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  JavaScript中的标签模板是什么_它如何扩展字符串功能  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  中国移动官方网站首页入口 中国移动官网网页登录  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  如何在香港免费服务器上快速搭建网站?  如何挑选优质建站一级代理提升网站排名?  微信公众帐号开发教程之图文消息全攻略  Laravel如何处理CORS跨域请求?(配置示例)  香港服务器部署网站为何提示未备案?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  高端网站建设与定制开发一站式解决方案 中企动力  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  如何快速生成橙子建站落地页链接?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  奇安信“盘古石”团队突破 iOS 26.1 提权  如何在Windows 2008云服务器安全搭建网站?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  成都网站制作公司哪家好,四川省职工服务网是做什么用?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  详解Android图表 MPAndroidChart折线图  如何快速重置建站主机并恢复默认配置?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  javascript中对象的定义、使用以及对象和原型链操作小结  如何获取上海专业网站定制建站电话?  音响网站制作视频教程,隆霸音响官方网站?  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  使用Dockerfile构建java web环境  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何用好域名打造高点击率的自主建站?  Android okhttputils现在进度显示实例代码  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  QQ浏览器网页版登录入口 个人中心在线进入  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  java获取注册ip实例  香港服务器选型指南:免备案配置与高效建站方案解析