新闻中心

XSLT怎么从一个字符串中解析出XML(parse-xml)

2025-12-14
浏览次数:
返回列表
XSLT 3.0 提供 parse-xml() 函数将良构 XML 字符串转为文档节点,要求字符串格式良好、不支持 DTD/外部实体,需配合 try/catch 处理异常,XSLT 2.0 不支持。

xslt怎么从一个字符串中解析出xml(parse-xml)

XSLT 本身不能直接“解析”任意字符串为 XML(比如像 J*aScript 的 DOMParser 那样),但自 XSLT 3.0 起,标准提供了 parse-xml() 函数,专门用于将**格式良好的 XML 字符串**安全地转换为可操作的树结构(即一个文档节点)。

parse-xml() 的基本用法

该函数接收一个字符串参数,返回一个文档节点(document-node())。前提是字符串内容必须是良构(well-formed)的 XML,否则会抛出运行时错误(如 XPDY0002)。

示例:

<xsl:variable name="xml-str" select="'<root><item id="1">A</item><item id="2">B</item></root>'"/>
<xsl:variable name="doc" select="parse-xml($xml-str)"/>
<!-- 现在可以像处理普通 XML 一样遍历 -->
<xsl:for-each select="$doc/root/item">
  <output id="{@id}"><xsl:value-of select="."/></output>
</xsl:for-each>

常见注意事项和限制

parse-xml() 是纯函数,不支持 DTD、外部实体、命名空间前缀绑定(除非字符串中已声明)、XML 声明中的编码声明(实际只按 UTF-8 或 UTF-16 处理)等高级特性。它只做语法解析,不进行验证。

  • 字符串中不能含未转义的 、<code>&,必须是合法 XML 文本(例如 < 表示字面小于号)
  • 不能解析 HTML;若需处理 HTML,应使用 parse-html()(XSLT 3.0+,需处理器支持)
  • 若字符串来自不可信来源,建议先用 try/catch 包裹,避免崩溃

配合 try/catch 安全使用(XSLT 3.0)

当输入可能非法时,用 xsl:try 捕获解析失败:

美图AI开放平台 美图AI开放平台

美图推出的AI人脸图像处理平台

美图AI开放平台 111 查看详情 美图AI开放平台
<xsl:try>
  <xsl:variable name="parsed" select="parse-xml($input)"/>
  <xsl:sequence select="$parsed//item"/>
  <xsl:catch>
    <error>Invalid XML: <xsl:value-of select="$input"/></error>
  </xsl:catch>
</xsl:try>

兼容性提醒:XSLT 2.0 不支持 parse-xml()

如果你用的是 XSLT 2.0 处理器(如 older Saxon-B、Xalan),parse-xml() 不可用。此时只能依赖处理器扩展函数(如 Saxon 9.1+ 的 saxon:parse()),或把解析逻辑前置到宿主语言(J*a/Python)中完成。

确认版本:检查你使用的处理器是否支持 XSLT 3.0(推荐 Saxon-HE 10+、Saxon-PE/EE 9.8+ 或 newer)。

基本上就这些。核心是:字符串要合法、用对版本、加好异常处理——parse-xml 就很可靠。

以上就是XSLT怎么从一个字符串中解析出XML(parse-xml)的详细内容,更多请关注其它相关文章!


# 如何将  # 爱联网络营销推广公司  # 香港seo优化角度  # 宁阳网站建设电话  # 美育网站建设公司  # 营销型企业网站推广  # 眉山百度知识营销推广公司  # 分公司可以建设网站  # 杭州网站建设哪家权威  # 惠安营销推广哪家强  # 广水seo排名优化  # 有哪些  # 客户端  # 的是  # javascript  # 如何用  # 如何使用  # 转换为  # 文档  # 不支持  # 美图  # 编码  # 处理器  # node  # html  # java  # python 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  如何使用纯J*aScript判断Input元素是否在特定类容器内  新手怎么开始学化妆 零基础化妆入门教程  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  星露谷物语官网入口 星露谷物语游戏官网入口  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  J*aScript教程:根据元素文本内容动态设置背景色  一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】  Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  高德地图怎么看全景照片_高德地图全景照片浏览教程  J*aScript Promise链中如何正确终止后续.then执行并处理错误  Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  苹果手机如何防止被恶意App追踪  163邮箱注册官网 免费申请163个人邮箱  漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  高德地图公交到站提醒失败如何解决 高德提醒权限设置  58动漫网在线官方网 58动漫网正版动漫入口网址  Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  Linux如何排查内存不足OOME问题_LinuxOOM分析教程  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  实现全屏滚动与导航点:专业教程  TikTok国际版官网直达_TikTok国际版官网直达进入在线观看  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  Django表单提交验证失败后保持字段值不刷新  在命令行怎么运行html项目_命令行运行html项目方法【教程】  浏览器打开即用 美图秀秀网页版入口  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  4399免费游戏网址入口 4399小游戏免费入口点开即玩  极速漫画官方主页网址 极速漫画漫画在线浏览官网链接  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作 

搜索