私はWebサービスから得たこの種類の値を含むopenrefineの列を持っています。Openrefine:子ノードの値に基づいてXMLを選択してください
<?xml version="1.0" encoding="UTF-8"?>
<results>
<result>
<nnt>2010BOR30012</nnt>
<ppn>146708164</ppn>
<typerecord>m</typerecord>
</result>
<result>
<nnt>2010BOR30012</nnt>
<ppn>159823226</ppn>
<typerecord>v</typerecord>
</result>
</results>
私は<typerecord>
は、例えば、Vである<result>
タグに含まれている<ppn>
値を取得するには、このXMLからできるようにしたいと思います。私はparseHtmlに基づいていろいろなことを試してみましたが、今のところ私はそれを達成するための解決策を見つけることができませんでした。私がしようとしているものは、主に以下のとおりです:@Tomalakからのコメント次
更新
- はparseHtml()を組み合わせて、(選択しようとしている)のxpathのいくつかの種類では、私はそれをthinkgていない可能ですが、もし何かが私に間違っていると分かったら、私は幸せになるでしょう:)
<result>
をループして、それぞれサブタイトル<typerecord>
を試してみてください。forEach(value.parseHtml().select("result"), e, "<xml>" + e.replace("\n", "").replace("\/", "/") + "</xml>")
のようなsomethinkgを使ってテストしてください。 parseHtmlを使用して解析することができます(その理由は、周囲の<xml>
タグを追加しようとしていますが、それは悪いですk、私は[ "<xml><result> <nnt> 1989BOR30027 <\/nnt> <ppn> 006608523 <\/ppn> <typerecord> m <\/typerecord><\/result><\/xml>" ]
のようなものがあります。これは、削除できなかった余分なもののために解析できません。
一方、greyを使用したソリューションを好む場合でも、私は問題を解決する方法を見つけました。この1つはjythonを使っていますので、そこに追加しますが、この質問はGrelの回答に残っています。
だから、仕事をしているようだJythonスクリプトは次のとおりです。
from xml.etree import ElementTree as ET
element = ET.fromstring(value)
resultsList = element.findall("./result")
for result in resultsList:
typerecord = result.find("typerecord")
if typerecord.text == "m":
return result.find("ppn").text
私は簡単に解決策があると確信しているが、私はまだそれを見つけることができませんでした!
これまでにさまざまなことを試したことがある場合は、コードを表示してください。 (コードがない場合は、最初に別のものを試してください) – Tomalak
WebサービスでJsonで結果を取得するオプションはありませんか?解析するのが簡単です。 –
@Tomalak私は選択するためにxpathを渡そうとしていましたが、私がテストを行ったPCに戻ったときに今夜例を挙げようとしました – Sylvain