如何在Notepad++中生成可粘贴到表格的结构化XPath查询结果?
问题说明
我有一份XML数据(示例用<Dog>/<Cat>/<Bird>代替真实的<Module>/<Module_Instance>节点),用以下XPath提取带Trick的feature相关信息:
//feature[contains(@name,'Trick')]/ancestor-or-self::*/@ID |//feature[contains(@name,'Trick')]/ancestor-or-self::*/@Breed |//feature[contains(@name,'Trick')]/ancestor-or-self::*/@name | //feature[contains(@name,'Trick')]/value/trick
但遇到两个问题:
- Notepad++里查询结果没法以表格格式输出,没法直接粘贴到电子表格
- 没法获取
feature元素名,用来做电子表格C1单元格的表头
目前在BaseX用XQuery有进展,但不会Notepad++里的XQuery用法,求解决办法。
解决方案
一、Notepad++用XQuery输出CSV格式(直接适配电子表格)
Notepad++的XML Tools插件支持XQuery,按以下步骤操作:
- 先安装XML Tools插件(插件管理器搜名字即可安装)
- 打开XML文件,点击菜单
XML Tools > Run XQuery - 粘贴以下XQuery代码并执行:
xquery version "3.0"; let $header := ("ID", "Breed", "ElementName", "FeatureName", "Trick") return string-join( ( string-join($header, ","), for $feature in //feature[contains(@name, 'Trick')] let $module := $feature/ancestor::*[local-name() = 'Module' or local-name() = 'Module_Instance'] return string-join( ( $module/@ID/string(), $module/@Breed/string(), local-name($feature), $feature/@name/string(), $feature/value/trick/string() ), "," ) ), " " )
- 执行后会得到CSV格式的结果,直接复制粘贴到Excel或Google Sheets,自动识别为表格,其中
ElementName列就是feature,刚好对应C1的需求。
二、代码逻辑说明
- 先定义表头,包含所需的所有列:ID、Breed、元素名(即
feature)、FeatureName、Trick - 遍历所有名字含Trick的feature节点,定位其上层的Module/Module_Instance节点
- 将每个节点的对应字段用逗号拼接成一行,搭配表头用换行分隔,生成标准CSV格式
三、快速替代方案:XPath+文本替换
如果暂时不想用XQuery,也可以用现有XPath结果手动整理:
- 执行你的XPath查询,把结果复制到新文档
- 用Notepad++的正则替换合并行:
- 查找框输入:
^(.*)\r\n(.*)\r\n(.*)\r\n(.*)\r\n - 替换框输入:
$1,$2,$3,$4\r\n - 手动添加表头行:
ID,Breed,ElementName,Trick(把ElementName设为feature)
- 查找框输入:
内容的提问来源于stack exchange,提问作者DBacker
相关产品推荐
相关产品推荐

