如何使用JSEL从JSON中获取指定cod值的父级键?
获取指定cod值对应的父级键名(JSEL + XPath)
要在JSEL中根据指定cod值(如"S1")获取其对应的各级父级键名(如shoes、items、Clothes),可以通过XPath的**祖先轴(ancestor)**结合节点名称函数实现,具体步骤如下:
1. 核心XPath表达式
先定位到目标cod节点,再向上遍历所有祖先节点并提取它们的名称(即JSON中的键名):
//*[@cod='S1']/ancestor::*/name()
表达式拆解:
//*[@cod='S1']:匹配所有包含cod属性且值为"S1"的节点/ancestor::*:选中该节点的所有祖先节点(从直接父节点一直到顶层根节点)/name():提取每个祖先节点的名称(对应JSON结构中的键名)
2. 代码示例
结合JSEL执行上述表达式:
var dom = jsel(data); // 获取cod为"S1"的所有父级键名 var parentKeys = dom.selectAll("//*[@cod='S1']/ancestor::*/name()"); console.log(parentKeys); // 输出:["sizes", "shoes", "items", "Clothes"]
3. 进阶筛选(可选)
如果只需要特定层级的父键(比如跳过sizes这类中间键,只保留shoes、items、Clothes),可以通过节点名称过滤:
//*[@cod='S1']/ancestor::*[name()='shoes' or name()='items' or name()='Clothes']/name()
执行后会得到:["shoes", "items", "Clothes"]
4. 处理重复cod值
如果JSON中存在多个相同cod值(如示例中的"L1"),上述表达式会返回所有对应节点的父键。若需要去重,可通过JS处理:
var uniqueParentKeys = [...new Set(parentKeys)];
内容的提问来源于stack exchange,提问作者NekoLopez
相关产品推荐
相关产品推荐

