You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写XPath实现提取headword文本与父div2的key属性拼接列表

问题根因

.NET 内置的 XPath 解析器仅支持 XPath 1.0 标准,你之前在 Oxygen 中可运行的表达式属于 XPath 2.0 及以上版本的语法:

  • 不支持在节点选择路径后直接调用concat/string-join等函数批量返回字符串结果
  • 不支持!操作符、序列入参的string-join用法
  • 1.0 版本的concat函数如果传入节点集参数,只会取第一个节点的文本值,这就是你直接写concat(//div2/@key, ',', //div2/headword/text())只返回第一条结果的原因
解决方案

方案1:使用.NET原生能力实现(推荐,无需引入第三方依赖)

不需要强行用单个XPath表达式完成拼接,先选中所有div2节点,再遍历每个节点单独取属性和文本拼接即可,代码示例如下:

XPathNavigator navigator = ResourceDocument.CreateNavigator();
// 先选中所有div2节点
XPathNodeIterator divNodeSet = navigator.Select(@"//div2", nsmgr);
List<string> resultList = new List<string>();

foreach (XPathNavigator divNode in divNodeSet)
{
    // 取当前div2的key属性
    string key = divNode.GetAttribute("key", string.Empty);
    // 取当前div2下第一个headword的文本
    string headword = divNode.SelectSingleNode("./headword[1]/text()", nsmgr)?.Value ?? string.Empty;
    
    // 如果你需要对headword做加短横线的特殊处理,在这里用C#字符串操作实现,比写复杂XPath简单很多
    // 示例:如果需要把τομεῖον转为τομ-εῖον,在这里写对应的处理逻辑即可
    resultList.Add($"{headword}, {key}");
}

最终resultList里的内容就是你需要的输出格式。

方案2:引入支持XPath 2.0+的第三方库

如果确实需要用单个XPath表达式完成需求,可以引入支持XPath 2.0标准的第三方XML处理库,你之前编写的XPath 2.0语法表达式就可以直接正常运行。

内容的提问来源于stack exchange,提问作者Todd Hoatson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 21:45:01