0

0

从Lotus Notes/Domino导出XML并上传到新系统

畫卷琴夢

畫卷琴夢

发布时间:2026-02-04 08:26:03

|

802人浏览过

|

来源于php中文网

原创

Domino数据库导出XML需手动实现:禁用DXL元数据或用LotusScript逐字段构造,注意字符转义、日期格式、附件Base64清理及分批上传防超时。

从lotus notes/domino导出xml并上传到新系统

导出前确认 Domino 数据库是否启用 XML 导出支持

Lotus Notes/Domino 本身不提供开箱即用的「一键导出 XML」功能,NotesDatabaseNotesView 对象没有原生 exportToXML() 方法。你实际能用的路径只有两条:一是通过内置的 @Command([ToolsExport]) 配合预设的 DXL 导出模板(DXL 是 Domino 的 XML Schema,不是通用 XML),二是用 LotusScript/Java Agent 手动构造 XML 文档并写入文件。

关键判断点:如果目标新系统只接受自定义 XML 结构(比如含 ... 而非 ...),就不能直接用 DXL 导出——它结构固定、嵌套深、带大量元数据,解析成本高且难映射。

  • 检查数据库属性 → “高级”选项卡 → 勾选“允许通过 Web 访问此数据库”,否则 Web Agent 或 HTTP 导出不可用
  • 确认服务器启用了 HTTPJAVAMAXHEAPSIZE(Java Agent 内存不足会导致 XML 构造中途崩溃)
  • DXL 导出默认包含 等无关内容,必须用 -d 参数禁用:load convert -d mydb.nsf(命令行工具

用 LotusScript Agent 生成结构可控的 XML

这是最稳妥的方式:绕过 DXL,用 NotesStream + NotesXMLProcessor 或纯字符串拼接,按需输出字段。注意 NotesXMLProcessor 实际是把 Notes 文档转成 DXL,所以仍不适用;推荐直接用 Print 写入 NotesStream

常见坑:NotesRichTextItem 中的换行、特殊字符(如 &、Replace,否则 XML 解析失败;日期字段要用 Format$(doc.DateField(0), "yyyy-mm-dd"),不能直接拼 CStr()

Sub Initialize
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim doc As NotesDocument
	Dim stream As NotesStream
	
	Set db = session.CurrentDatabase
	Set view = db.GetView("ExportView")
	Set stream = session.CreateStream
	Call stream.Open("C:\export\output.xml", "UTF-8")
	
	Call stream.WriteText( & Chr(10))
	Call stream.WriteText( & Chr(10))
	
	Set doc = view.GetFirstDocument
	Do Until doc Is Nothing
		Call stream.WriteText( & Chr(10))
		Call stream.WriteText(Replace(doc.FirstName(0), "&", "&") & Chr(10))
		Call stream.WriteText(doc.Email(0) & Chr(10))
		Call stream.WriteText( & Chr(10))
		Set doc = view.GetNextDocument(doc)
	Loop
	
	Call stream.WriteText()
	Call stream.Close
End Sub

上传时避免 HTTP 413 或超时:分批 + 设置超时

Domino 服务器默认限制单次 POST 大小为 10MB(MaxPostSize=10000),且 Java Agent 默认超时 60 秒。导出 5000+ 条记录的 XML 很容易触发这两个限制。

Presentations.AI
Presentations.AI

AI驱动创建令人惊叹的演示文稿

下载
  • 在服务器文档中修改 notes.ini:添加 MaxPostSize=50000(单位 KB)和 JavaMaxHeapSize=1024M
  • 上传代码里必须分片:每 200 条文档生成一个 XML 文件,用循环调用 URLConnectioncurl
  • 若用 curl 上传,务必加 --max-time 300 --connect-timeout 30,否则网络抖动直接中断
  • 不要依赖 session.DocumentContext 在 Web Agent 里读取大 XML —— 它会加载整个 body 到内存,OOM 风险极高

新系统接收端校验 XML 格式的关键点

很多团队只关注导出,却在上传后发现新系统报 XML Parse Error: EntityRef: expecting ';' Invalid character in entity name。根本原因不是 Domino 导出错,而是字段值里混入了控制字符(如 ASCII 0x00–0x08、0x0B–0x0C、0x0E–0x1F)或未转义的 Unicode 替代对(surrogate pairs)。

LotusScript 没有内置的 XML 安全清理函数,必须手动过滤:

  • AscW() 遍历每个字符,剔除 AscW(ch) 9 And AscW(ch) 10 And AscW(ch) 13
  • 对富文本字段,先用 doc.GetFormattedText(False, 0) 提取纯文本,再清理
  • 上传前用 Python 快速验证:python -c "import xml.etree.ElementTree as ET; ET.parse('output.xml')"

真正麻烦的是二进制附件(如扫描件)的 Base64 编码处理——Domino 的 EmbeddedObject 输出的 Base64 可能含换行符,而标准 XML 不允许。必须用 Replace(encoded, Chr(10), "") 清掉所有换行再写入

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

187

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

1

2026.02.03

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

864

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

439

2024.06.27

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

318

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

754

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

95

2025.08.19

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1911

2024.04.01

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

19

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号