3

JythonとElementTreeを使用してGoogleRefineでいくつかの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
4

3 に答える 3

2

間違った名前空間を使用しました。これはJython2.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
于 2011-12-15T00:53:38.580 に答える
2

次のようなGREL式を使用できます。試してみてください。

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

見つかった識別子ごとに、htmlTextを指定して、すべてをコンマで結合します。parseHtml()はJsoup.orgライブラリを使用し、実際にはタグと構造を解析するだけです。また、ns |識別子の形式で名前空間を解析することも知っており、この場合の目的を取得するための優れた方法です。

于 2011-12-15T20:29:07.727 に答える
0

GoogleRefineに直接貼り付けることができるJFSebastianのバージョンを少し調整します。

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ステートメントで使用される区切り文字を変更できます。

于 2011-12-15T17:35:06.317 に答える