全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

PostgreSQL的xml_is_well_formed函数怎么用

xml_is_well_formed只接受text类型输入,用于快速校验XML字符串是否符合基础Well-Formed规则,不解析结构、不支持xml类型参数,也不做DTD/XSD验证。

xml_is_well_formed 只接受 text 类型输入,不能直接传 XML 值

xml_is_well_formed 是 PostgreSQL 提供的纯文本校验函数,它不解析 XML 结构,也不做 DTD 或 Schema 验证,只检查字符串是否符合基础的 Well-Formed 规则(比如标签闭合、嵌套合法、字符转义正确等)。关键点是:它**只接受 text 参数,不接受 xml 类型值**。如果你传入一个已成功转换为 xml 类型的值(比如用 XMLPARSE 构造的),会报错:function xml_is_well_formed(xml) does not exist

  • ✅ 正确用法:xml_is_well_formed('ok')
  • ❌ 错误用法:xml_is_well_formed(XMLPARSE(CONTENT '...'))
  • ⚠️ 注意:即使字符串里有 BOM(如 UTF-8 BOM \xEF\xBB\xBF),也会导致返回 false

常见校验失败原因:空字符串、null、编码问题、非法字符

该函数对输入非常敏感,以下情况都会返回 false

  • 输入为 NULL → 返回 NULL(不是 false,注意三值逻辑)
  • 空字符串 '' → 返回 false
  • 含不可见控制字符(如 \x00\x01\x08\x0B\x0C\x0E\x1F)→ 返回 false
  • UTF-8 编码错误(如截断的多字节序列)→ 返回 false
  • XML 声明中指定了不支持的编码(如 encoding="ISO-8859-1" 但内容实际是 UTF-8)→ 返回 false

所以实际使用时建议先用 length()convert_from() 粗筛,再调用 xml_is_well_formed

和 XMLPARSE 的关系:校验 ≠ 解析,两者要配合用

xml_is_well_formed 快但浅,XMLPARSE 慢但深。前者适合在 INSERT/UPDATE 前快速过滤明显坏数据;后者才真正构建 XML 树并报详细错误(比如“mismatched tag”)。典型组合用法:

SELECT 
  data,
  xml_is_well_formed(data) AS is_wf,
  CASE 
    WHEN xml_is_well_formed(data) THEN XMLPARSE(CONTENT data)
    ELSE NULL 
  END AS parsed_xml
FROM (VALUES 
  ('test'),
  ('unclosed'),
  ('')
) AS t(data);
  • xml_is_well_formed 能避免 XMLPARSE 因语法错误而中断整个查询
  • 但它无法发现语义错误(如重复 ID、非法命名空间前缀),这些仍需后续用 XPath 或 XSLT 处理
  • 性能上,xml_is_well_formedXMLPARSE 快 3–5 倍(实测千行随机 XML 字符串)

替代方案:需要 Schema 验证就得用外部工具或 plpythonu

PostgreSQL 内置不支持 DTD/XSD 验证。xml_is_well_formed 只管“形”,不管“义”。如果业务要求必须符合某 XSD:

  • plpythonu + lxml(需启用扩展并安装 Python 包)
  • 在应用层解析(推荐:更可控、易调试、可复用验证逻辑)
  • 导入前用 xmllint --schema schema.xsd --noout file.xml 预检(Shell 批处理场景)

别指望靠 xml_is_well_formed 拦住所有非法 XML —— 它连注释里的 嵌套错误都可能放过。


# python  # 编码  # 字节  # 工具 


相关文章: 临沂网站制作企业,临沂第三中学官方网站?  建站之星如何保障用户数据免受黑客入侵?  建站之星微信建站一键生成小程序+多端营销系统  红河网站制作公司,红河事业单位身份证如何上传?  ,在苏州找工作,上哪个网站比较好?  海南网站制作公司有哪些,海口网是哪家的?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  如何快速搭建FTP站点实现文件共享?  已有域名如何免费搭建网站?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何快速生成高效建站系统源代码?  建站主机与服务器功能差异如何区分?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何快速搭建高效可靠的建站解决方案?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何配置FTP站点权限与安全设置?  如何获取开源自助建站系统免费下载链接?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星导航配置指南:自助建站与SEO优化全解析  高防服务器租用如何选择配置与防御等级?  制作网站的模板软件,网站怎么建设?  如何在云虚拟主机上快速搭建个人网站?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  开源网站制作软件,开源网站什么意思?  如何通过西部建站助手安装IIS服务器?  公司门户网站制作流程,华为官网怎么做?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  javascript基本数据类型及类型检测常用方法小结  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  深圳网站制作案例,网页的相关名词有哪些?  如何在阿里云ECS服务器部署织梦CMS网站?  如何获取上海专业网站定制建站电话?  建站之星伪静态规则如何正确配置?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  实例解析Array和String方法  模具网站制作流程,如何找模具客户?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  宝塔建站后网页无法访问如何解决?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何配置IIS站点权限与局域网访问?  PHP 500报错的快速解决方法  如何在阿里云服务器自主搭建网站?  如何快速登录WAP自助建站平台?  如何彻底卸载建站之星软件? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。