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 压缩包,按以下步骤解析:

  1. 用 ZIPfile 打开.xmind 文件
  2. 读取 content.json(新版 Xmind)或 content.xml(旧版 Xmind)
  3. 解析 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 产品的规则的报警信息
========================================

核心实现逻辑

提取节点路径

  1. 提取根节点

    root_match = re.search(r'<topic[^>]*>.*?<title[^>]*>([^<]+)</title>', content, re.DOTALL)
    root = root_match.group(1).replace('&#13;', ' ').replace('&amp;', '&').strip()
    
  2. 提取一级 - 二级结构

    pattern = r'<topic[^>]*>.*?<title[^>]*>([^<]+)</title>.*?<children><topics[^>]*><topic[^>]*>.*?<title[^>]*>([^<]+)</title>'
    matches = re.findall(pattern, content, re.DOTALL)
    
  3. 构建路径

    • 匹配到的节点为二级节点时:根节点 > 一级节点 > 二级节点
    • 匹配到的节点为一级节点时:根节点 > 一级节点
    • 匹配到的节点为深层节点时:根节点 > 父节点 > 匹配节点

匹配内容截取

  • 匹配内容显示 50 字以内,超出部分用 ... 省略

注意事项

  • Xmind 文件可能是旧版(.xml)或新版(.json),需要兼容处理
  • 递归搜索时使用 rglob("*.xmind") 确保找到所有嵌套目录中的文件
  • 关键字匹配使用 .lower() 实现不区分大小写
  • 处理异常情况:文件损坏、格式不支持等,捕获异常并继续处理下一个文件
  • 如果未找到匹配结果,明确告知用户"未找到匹配的文件"
  • 匹配内容截取至 50 字,超出部分用"..."省略

脚本位置

  • 脚本:C:\Users\yuling01\AppData\Roaming\LobsterAI\SKILLs\xmind-search\scripts\xmind_search.py
  • 支持功能:目录遍历、多关键字搜索、AND/OR 匹配模式
Installs
1
First Seen
Apr 2, 2026