xmind-search
SKILL.md
Xmind 文件搜索
在.xmind 文件中搜索关键字,返回匹配的文件路径、文件名和内容概述。
使用场景
用户需要在一个或多个 Xmind 文件中查找包含特定关键字的内容。
输入
用户提供:
- 关键字:要搜索的词语(支持多关键字,可用"或者"、"OR"或逗号分隔)
- 目标:单个.xmind 文件 或 包含 xmind 文件的目录路径
- 匹配模式(可选):AND 或 OR,默认 OR
关键字分隔符示例:
"关键字 1 或者 关键字 2"- 中文分隔符"keyword1 OR keyword2"- 英文分隔符"key1,key2"- 逗号分隔
输入示例:
- 关键字:
"o":"qaCode" 或者 "A 产品的规则的报警信息" - 目录:
D:\项目文档\需求测试思维导图
处理流程
1. 定位目标文件
- 如果用户提供的是文件路径,直接使用
- 如果是目录,使用
glob递归搜索所有*.xmind文件 - 重要:必须使用递归搜索(
glob(..., recursive=True)或rglob("*.xmind"))
2. 解析 Xmind 文件
Xmind 文件本质是 ZIP 压缩包,按以下步骤解析:
- 用 ZIPfile 打开.xmind 文件
- 读取
content.json(新版 Xmind)或content.xml(旧版 Xmind) - 解析 JSON 或 XML 提取内容
3. 提取节点结构
使用正则表达式提取:
- 根节点(整个 Xmind 文件的顶层主题)
- 一级节点标题(根节点下的直接子节点)
- 二级节点标题(一级节点的子节点)
4. 搜索匹配
在以下内容中进行不区分大小写的关键字匹配:
- 文件名
- 一级节点标题
- 二级节点标题
- 深层节点内容(全文搜索)
匹配模式:
- AND 模式:所有关键字都必须匹配(用
--and指定) - OR 模式:任一关键字匹配即可(用
--or指定,默认)
5. 输出结果
输出格式:
========================================
【关键字:xxx】
========================================
结果:成功匹配
文件名:【咪咕私有化】智能风控一期 - 定制需求合集 26·Q1.xmind
文件路径:D:/项目文档/需求测试思维导图/2026/2026Q1/【咪咕私有化】智能风控一期 - 定制需求合集 26·Q1.xmind
节点路径:根节点 > 一级节点 > 二级节点 > 匹配节点
匹配内容:[匹配的详细内容,50 字以内]
========================================
格式说明:
- 文件名:显示原始文件名(不含路径)
- 文件路径:显示完整绝对路径
路径格式说明:
- 格式:
根节点 > 一级节点 > 二级节点 > 匹配节点 - 如果匹配的是一级节点,则显示:
根节点 > 一级节点 - 如果匹配的是二级节点,则显示:
根节点 > 一级节点 > 二级节点 - 如果匹配的是深层节点,则显示:
根节点 > 一级节点 > 深层节点 - 路径中各节点用
>分隔
关键字分别输出:
- 每个关键字的匹配结果单独列出
- 格式统一,便于查看
使用说明
命令行调用
基本用法:
python xmind_search.py <关键字> <文件或目录路径> [选项]
参数说明:
<关键字>:要搜索的词语(必填)<文件或目录路径>:目标.xmind 文件或包含 xmind 文件的目录(必填)[选项]:可选参数--and:所有关键字都必须匹配--or:任一关键字匹配即可(默认)-h, --help:显示帮助信息
关键字格式
| 格式 | 示例 | 说明 |
|---|---|---|
| 单个关键字 | "qaCode" |
搜索包含 qaCode 的内容 |
| "或者"分隔 | "关键字 1 或者 关键字 2" |
中文分隔符 |
| "OR"分隔 | "key1 OR key2" |
英文分隔符 |
| 逗号分隔 | "key1,key2" |
逗号分隔符 |
使用示例
1. 搜索单个关键字
python xmind_search.py "报警" "D:\项目文档\需求测试思维导图"
2. 搜索多个关键字(OR 模式)
python xmind_search.py "qaCode 或者 报警信息" "D:\项目文档"
3. 搜索多个关键字(AND 模式)
python xmind_search.py "qaCode,fieldConfig" "D:\项目文档" --and
4. 搜索单个文件
python xmind_search.py "需求说明" "D:\项目文档\test.xmind"
5. 查看帮助
python xmind_search.py --help
输出说明
搜索成功时:
============================================================
Xmind 文件搜索工具
============================================================
[搜索配置]
关键字:"qaCode", "报警信息"
匹配模式:OR (任一关键字匹配即可)
目标目录:D:\项目文档
[正在搜索...]
------------------------------------------------------------
[搜索完成] 耗时:0.15 秒
[统计] 共匹配 3 个文件
============================================================
[关键字:qaCode]
匹配文件数:2
------------------------------------------------------------
[1] 文件:智能风控.xmind
路径:D:\项目文档\智能风控.xmind
节点:根节点 > 字段映射配置 > MIGU_VIDEO
匹配:irisk.field-mapping.extFieldConfig.MIGU_VIDEO...
[2] 文件:需求文档.xmind
路径:D:\项目文档\需求文档.xmind
节点:根节点 > 产品权限 > 规则报警配置
匹配:qaCode 字段配置...
[关键字:报警信息]
匹配文件数:1
------------------------------------------------------------
[1] 文件:智能风控.xmind
路径:D:\项目文档\智能风控.xmind
节点:根节点 > 产品权限 > 只能看到、搜索到 A 产品的规则的报警信息
匹配:只能看到、搜索到 A 产品的规则的报警信息
============================================================
[搜索结束]
============================================================
未找到匹配时:
============================================================
[未找到匹配的文件]
============================================================
[建议]
1. 检查关键字是否正确
2. 确认目录中包含.xmind 文件
3. 尝试使用更简短的关键字
错误提示:
- 缺少参数:显示使用说明
- 路径不存在:提示"路径不存在:xxx"
- 关键字为空:提示"关键字不能为空"
========================================
【关键字:报警】
========================================
结果:成功匹配
文件名:【咪咕私有化】智能风控一期 - 定制需求合集 26·Q1.xmind
文件路径:D:/项目文档/需求测试思维导图/2026/2026Q1/【咪咕私有化】智能风控一期 - 定制需求合集 26·Q1.xmind
节点路径:根节点 > 产品权限 > 只能看到、搜索到 A 产品的规则的报警信息
匹配内容:只能看到、搜索到 A 产品的规则的报警信息
========================================
匹配一级节点
========================================
【关键字:需求说明】
========================================
结果:成功匹配
文件名:智能风控.xmind
文件路径:D:/项目文档/需求测试思维导图/2026/2026Q1/智能风控.xmind
节点路径:根节点 > 【需求说明】
匹配内容:【需求说明】将「智慧大脑 - 团伙检测」功能同步到咪咕私有化系统...
========================================
多个关键字(OR 模式)
========================================
【关键字:qaCode】
========================================
结果:成功匹配
文件名:test.xmind
文件路径:D:/XX/XX/test.xmind
节点路径:根节点 > 字段映射配置 > MIGU_VIDEO
匹配内容:irisk.field-mapping.extFieldConfig.MIGU_VIDEO...qaCode...
========================================
【关键字:报警】
========================================
结果:成功匹配
文件名:test.xmind
文件路径:D:/XX/XX/test.xmind
节点路径:根节点 > 产品权限 > 只能看到、搜索到 A 产品的规则的报警信息
匹配内容:只能看到、搜索到 A 产品的规则的报警信息
========================================
核心实现逻辑
提取节点路径
-
提取根节点:
root_match = re.search(r'<topic[^>]*>.*?<title[^>]*>([^<]+)</title>', content, re.DOTALL) root = root_match.group(1).replace(' ', ' ').replace('&', '&').strip() -
提取一级 - 二级结构:
pattern = r'<topic[^>]*>.*?<title[^>]*>([^<]+)</title>.*?<children><topics[^>]*><topic[^>]*>.*?<title[^>]*>([^<]+)</title>' matches = re.findall(pattern, content, re.DOTALL) -
构建路径:
- 匹配到的节点为二级节点时:
根节点 > 一级节点 > 二级节点 - 匹配到的节点为一级节点时:
根节点 > 一级节点 - 匹配到的节点为深层节点时:
根节点 > 父节点 > 匹配节点
- 匹配到的节点为二级节点时:
匹配内容截取
- 匹配内容显示 50 字以内,超出部分用
...省略
注意事项
- Xmind 文件可能是旧版(.xml)或新版(.json),需要兼容处理
- 递归搜索时使用
rglob("*.xmind")确保找到所有嵌套目录中的文件 - 关键字匹配使用
.lower()实现不区分大小写 - 处理异常情况:文件损坏、格式不支持等,捕获异常并继续处理下一个文件
- 如果未找到匹配结果,明确告知用户"未找到匹配的文件"
- 匹配内容截取至 50 字,超出部分用"..."省略
脚本位置
- 脚本:
C:\Users\yuling01\AppData\Roaming\LobsterAI\SKILLs\xmind-search\scripts\xmind_search.py - 支持功能:目录遍历、多关键字搜索、AND/OR 匹配模式