【发布时间】:2017-02-04 22:45:53
【问题描述】:
我需要找到从以下 XML 数据中收集作家和艺术家信息的最佳方法。 comic 节点出现多次,包含一本漫画书的数据。
我无法根据他们的工作职能,作家,艺术家等找到合适的人。有时每本漫画都有多个作家和艺术家。我的计划是将每个添加/附加到列表中。
因此,对于这本漫画书,我需要获取所有作家和艺术家的显示名称,但工作职能(例如作家)是人名的兄弟。
这是我拥有的,但不起作用:
writer = []
penciler = []
doc.xpath('//comic').each do |main_element|
main_element.xpath("mainsection/credits/credit/role[@id='dfWriter']").each do |n|
writer << n.xpath('person/displayname').text
end
main_element.xpath("mainsection/credits/credit/role[@id='dfPenciler']").each do |n|
penciler << n.xpath('person/displayname').text
end
end
p "Writer(s): ",writer
p "Penciler(s): ",penciler
这是 XML 文件/数据:
<comic>
<id>3398</id>
<index>195</index>
<mainsection>
<title>Mind Games</title>
<myrating>0</myrating>
<myrating>
<displayname>0</displayname>
<sortname>0</sortname>
</myrating>
<pagecount>32</pagecount>
<credits>
<credit>
<role id="dfWriter">Writer</role>
<roleid>dfWriter</roleid>
<person>
<displayname>Will Pfeifer</displayname>
<sortname>Pfeifer, Will</sortname>
<lastname>Pfeifer</lastname>
<firstname>Will</firstname>
</person>
</credit>
<credit>
<role id="dfWriter">Writer</role>
<roleid>dfWriter</roleid>
<person>
<displayname>John Byrne</displayname>
<sortname>Byrne, John</sortname>
<lastname>Byrne</lastname>
<firstname>John</firstname>
</person>
</credit>
<credit>
<role id="dfPenciler">Penciller</role>
<roleid>dfPenciler</roleid>
<person>
<displayname>John Byrne</displayname>
<sortname>Byrne, John</sortname>
<lastname>Byrne</lastname>
<firstname>John</firstname>
</person>
</credit>
</credits>
</mainsection>
</comic>
我的代码没有给我想要的结果。我找到了“Getting the siblings of a node with Nokogiri”,但我需要迭代并抓取每个兄弟姐妹。
我可以通过<roleid>dfWriter</roleid> 或<role id="dfWriter">Writer</role> 搜索,因为它们是相同的。
我的预期输出是:
Writer(s): Will Pfeifer, John Byrne
Penciler(s): John Byrne
【问题讨论】:
-
XML 似乎与您的代码不一致。您将
comic显示为根节点,但//comic不是我们搜索的方式。