如何通过定界符分隔XPath结果?

时间:2019-05-02 20:17:26

标签: xml xpath knime

我拥有许多科学出版物的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工作流程:

enter image description here

样品电流输出:

enter image description here

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

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

enter image description here

最终目标:

enter image description here

任何与作者解决此问题的想法将不胜感激!

1 个答案:

答案 0 :(得分:5)

理想情况下,您应该分多个步骤进行操作。我将按照以下步骤进行操作:

  1. 提取所有contrib元素,并使用XPath节点将返回的“节点”作为行(不是作为字符串)返回
  2. 使用另一个XPath节点提取surnamegiven-namesxref
  3. 将他们加入一起,例如使用String Manipulation节点
  4. 将所有内容合并为一个字符串,例如使用Column CombinerGroupBy节点

[edit]您可以在我的公共NodePit空间上找到一个可以正常工作的示例工作流:

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

workflow

[关于您的编辑]据我所知,您现在面临的挑战是,您的表包含多个一个发布,并且GroupBy节点会将它们全部合并为一行。为避免这种情况,可以使用“循环”节点。只需用一对Chunk Loop Start和一个Loop End节点围绕上面描述的逻辑即可。这样,您就可以“独立”处理每个公共帐户。