草庐IT

xml - 如何用定界符分隔 XPath 结果?

coder 2024-06-29 原文

我有许多科学出版物的 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.;金学中;浦晓涛;刘鸿文*

[编辑]

当前的 KNIME 工作流程:

示例电流输出:

我试过将所有出版物的所有作者姓名输出到一个集合单元中。 (如果我将所有名称输出到多个列中,这最终会创建数百个包含缺失值的列。我什至尝试使用多个字符串操作来实现我的理想输出,但它仍然不是完美的,由于一些author names having multiple names, hyphenated names, or names containing special characters.) collection cell 将所有作者姓名与每个作者姓名之间的逗号分隔符组合在一起,但组合了姓氏和名字。我也可以对这些进行与上述相同的字符串操作,但仍然会遇到与上述相同的问题。

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

最终目标:

如果能与作者一起解决这个问题,我们将不胜感激!

最佳答案

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

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

[编辑] 你可以在我的公共(public) 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 节点会将它们全部组合成一行。为避免这种情况,您可以使用“循环”节点。只需用一对 Chunk Loop Start 包围我上面描述的逻辑和一个 Loop End节点。这使您可以“孤立地”处理每个公共(public)。

关于xml - 如何用定界符分隔 XPath 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959662/

有关xml - 如何用定界符分隔 XPath 结果?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

  4. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  5. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  6. ruby-on-rails - capybara ::ElementNotFound:无法找到 xpath "/html" - 2

    我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'

  7. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  8. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  9. ruby - 如何用递增的值填充数组 Ruby - 2

    我正在尝试解决http://projecteuler.net/problem=1.我想创建一个方法,它接受一个整数,然后创建一个包含它前面的所有整数的数组,并将整数本身作为数组中的值。以下是我目前所拥有的。代码不起作用。defmake_array(num)numbers=Array.newnumcount=1numbers.eachdo|number|numbers 最佳答案 (1..num).to_a是您在Ruby中需要做的全部。1..num将创建一个Range对象,以1开始并以任意值num结束是。Range对象有to_a方法通过

  10. ruby - 如何用 Nokogiri 解析连续的标签? - 2

    我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(

随机推荐