【问题标题】:How can you parse xml in Google Refine using jython/python ElementTree如何使用 jython/python ElementTree 在 Google Refine 中解析 xml
【发布时间】:2011-12-15 00:36:45
【问题描述】:

我尝试使用 Jython 和 ElementTree 在 Google Refine 中解析一些 xml,但我很难找到任何文档来帮助我完成这项工作(可能不是因为不是 python 编码器而没有帮助)

这是我尝试解析的 XML 的摘录。我正在尝试返回所有dc:indentifier 的连接字符串:

<oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
  <dc:creator>J. Koenig</dc:creator>
  <dc:date>2010-01-13T15:47:38Z</dc:date>
  <dc:date>2010-01-13T15:47:38Z</dc:date>
  <dc:date>2010-01-13T15:47:38Z</dc:date>
  <dc:identifier>CCTL0059</dc:identifier>
  <dc:identifier>CCTL0059</dc:identifier>
  <dc:identifier>http://open.jorum.ac.uk:80/xmlui/handle/123456789/335</dc:identifier>
  <dc:format>application/pdf</dc:format>
</oai_dc:dc>

这是我目前得到的代码。这是一个返回任何东西的测试,因为现在我得到的只是'错误:null'

from elementtree import ElementTree as ET
element = ET.parse(value)

namespace = "{http://www.openarchives.org/OAI/2.0/oai_dc/}"
e = element.findall('{0}identifier'.format(namespace))
for i in e:
   count += 1
return count

【问题讨论】:

    标签: python xml-parsing jython google-refine


    【解决方案1】:

    你可以像这样使用GREL表达式,试试看:

    forEach(value.parseHtml().select("dc|identifier"),v,v.htmlText()).join(",")
    

    对于找到的每个标识符,给我 htmlText 并用逗号将它们全部连接起来。 parseHtml() 使用 Jsoup.org 库,实际上只是解析标签和结构。它还知道使用 ns|identifier 格式解析命名空间,并且是在这种情况下获得所需内容的好方法。

    【讨论】:

    • 由于某种原因,我无法让 @j-f-sebastian 或 Tom 的变体在 Google Refine 中工作(可能是我安装 Refine 的问题?),但 GREL 解决方案对我有用跨度>
    【解决方案2】:

    您使用了错误的命名空间。这适用于 Jython 2.5.1:

    from xml.etree import ElementTree as ET
    element = ET.fromstring(value) # `value` is a string with the xml from question
    
    namespace = "{http://purl.org/dc/elements/1.1/}"
    for e in element.getiterator(namespace+'identifier'):
        print e.text
    

    输出

    CCTL0059
    CCTL0059
    http://open.jorum.ac.uk:80/xmlui/handle/123456789/335
    

    【讨论】:

      【解决方案3】:

      这里对 J.F. Sebastian 的版本稍作调整,可以直接粘贴到 Google Refine 中:

      from xml.etree import ElementTree as ET
      element = ET.fromstring(value)
      namespace = "{http://purl.org/dc/elements/1.1/}"
      return ','.join([e.text for e in element.getiterator(namespace+'identifier')])
      

      它返回一个逗号分隔的列表,但您可以更改 return 语句中使用的分隔符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-06
        • 2017-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-16
        相关资源
        最近更新 更多