首页 > 解决方案 > 如何通过分隔符分隔 XPath 结果?

问题描述

我有许多科学出版物的 XML 数据,我正在尝试解析 KNIME 中的数据以提取我需要的字段。这是一个例子:https ://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pmc&id=PMC4400176

为了提取作者的姓名,我使用了以下 XPath 查询:/pmc-articleset/article/front/article-meta/contrib-group/contrib[@contrib-type="author"]

但是,这会返回: BorisovaSvetlana A., KimHak Joong, PuXiaotao, LiuHung-wen*

我想用一些分隔符、逗号/空格分隔姓氏和名字,并用分号分隔不同的作者姓名。这可能吗?或者与我目前正在做的事情相比,是否有更好的方法来提取信息,这将使我能够实现理想的输出:

Borisova, Svetlana A.; Kim, Hak Joong; Pu, Xiaotao; Liu, Hung-wen*

[编辑]

当前的 KNIME 工作流程:

在此处输入图像描述

采样电流输出:

在此处输入图像描述

我尝试将所有出版物的所有作者姓名都输出到集合单元中。(如果我将所有名称输出到多个列中,这最终会创建数百个包含缺失值的列。我什至尝试使用多个字符串操作来实现我的理想输出,但由于某些原因,它仍然不是那么完美作者姓名有多个姓名、连字符姓名或包含特殊字符的姓名。)集合单元格将所有作者姓名与每个作者姓名之间的逗号分隔符组合在一起,但将姓氏和给定名称组合在一起。我也可以对这些进行上述相同的字符串操作,但仍会遇到与上述相同的问题。

如果我将作者姓名分成多行,这会为每篇文章创建多行,我不确定如何达到每篇文章的最终目标。

在此处输入图像描述

最终目标:

在此处输入图像描述

任何关于如何与作者一起解决这个问题的想法将不胜感激!

标签: xmlxpathknime

解决方案


理想情况下,您应该分多个步骤执行此操作。我会这样做:

  1. 提取所有元素并使用XPath节点contrib将生成的“节点”作为行(而不是字符串)返回
  2. 提取surnamegiven-namesxref使用另一个XPath节点
  3. 将它们连接在一起,例如使用字符串操作节点
  4. 将所有内容组合成一个字符串,例如使用Column CombinerGroupBy节点

[编辑] 您可以在我的公共 NodePit 空间中找到一个完整的示例工作流:

https://nodepit.com/workflow/com.nodepit.space%2Fqqilihq%2Fpublic%2FStack_Overflow%2FStack_Overflow_how-to-separate-xpath-results-by-a-delimiter_55959662.knwf

工作流程

[关于您的编辑] 据我所知,您现在面临的挑战是,您的表包含多个出版物,并且 GroupBy 节点会将它们全部组合成一行。为避免这种情况,您可以使用“循环”节点。简单地用一对块循环开始和一个循环结束节点围绕我上面描述的逻辑。这使您可以“孤立地”处理每个公共。


推荐阅读