讲师中心 微信公众号
AI工具推荐 视频效率加速

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

老明吖_1629

老明吖_1629

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

|

862人浏览过

|

来源于php中文网

原创

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

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

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

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

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

  • 检查数据库属性 → “高级”选项卡 → 勾选“允许通过 Web 访问此数据库”,否则 Web Agent 或 HTTP 导出不可用
  • 确认服务器启用了 HTTPJAVAMAXHEAPSIZE(Java Agent 内存不足会导致 XML 构造中途崩溃)
  • DXL 导出默认包含 <database>、<design> 等无关内容,必须用 -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()。

361SCAN security check your skill python scripts
361SCAN security check your skill python scripts

扫描并分析已安装技能,用于查看指定技能目录的名称、描述和详情,或列出所有已安装的技能。

下载
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(<?xml version="1.0" encoding="UTF-8"?> & Chr(10))
	Call stream.WriteText(<data> & Chr(10))
	
	Set doc = view.GetFirstDocument
	Do Until doc Is Nothing
		Call stream.WriteText(<record id="<code>doc.UniversalID</code>"> & Chr(10))
		Call stream.WriteText(<name><code>Replace(doc.FirstName(0), "&", "&")</code></name> & Chr(10))
		Call stream.WriteText(<email><code>doc.Email(0)</code></email> & Chr(10))
		Call stream.WriteText(</record> & Chr(10))
		Set doc = view.GetNextDocument(doc)
	Loop
	
	Call stream.WriteText(</data>)
	Call stream.Close
End Sub

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

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

  • 在服务器文档中修改 notes.ini:添加 MaxPostSize=50000(单位 KB)和 JavaMaxHeapSize=1024M
  • 上传代码里必须分片:每 200 条文档生成一个 XML 文件,用循环调用 URLConnection 或 curl
  • 若用 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) < 32 And 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), "") 清掉所有换行再写入 <attachment>。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

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

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

2960

2023.09.27

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

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

249

2026.02.03

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

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

1749

2023.07.31

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

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

1211

2024.06.27

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

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

580

2023.10.17

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

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

876

2023.10.18

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

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

1906

2025.08.19

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

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

4624

2024.04.01

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn