2

私の目的は、この XML ファイルから 2 つのリストのリストを抽出することです。

<famous_people>
  <famous_person>
    <first_name>Wolfgang</first_name>
    <last_name>Goethe</last_name>
    <year_of_birth>1749</year_of_birth>
    <country_of_origin>Germany</country_of_origin>
  </famous_person>
  <famous_person>
    <first_name>Miguel</first_name>
    <last_name>Cervantes</last_name>
    <widely_known_for>Don Quixote</widely_known_for>
  </famous_person>
</famous_people>

抽出したいリストは次のとおりです。

[[("first_name","Wolfgang"),("last_name","Goethe"),("year_of_birth","1749"),("country_of_origin","Germany")],[("first_name","Miguel"),("last_name","Cervantes"),("widely_known_for","Don Quixote")]]

この GHCi の出力で証明されているように、関心のあるすべてのタプルが 1 つの大きなフラット リスト内にあるところまでしか到達できませんでした。

Prelude> import Text.XML.HXT.Core
Prelude Text.XML.HXT.Core> import Text.HandsomeSoup
Prelude Text.XML.HXT.Core Text.HandsomeSoup> 
Prelude Text.XML.HXT.Core Text.HandsomeSoup> html <- readFile "test.html"
Prelude Text.XML.HXT.Core Text.HandsomeSoup> 
Prelude Text.XML.HXT.Core Text.HandsomeSoup> let doc = readString [] html
Prelude Text.XML.HXT.Core Text.HandsomeSoup> 
Prelude Text.XML.HXT.Core Text.HandsomeSoup> runX $ doc >>> getChildren >>> getChildren >>> getChildren >>> multi (getName &&& deep getText)
[("first_name","Wolfgang"),("last_name","Goethe"),("year_of_birth","1749"),("country_of_origin","Germany"),("first_name","Miguel"),("last_name","Cervantes"),("widely_known_for","Don Quixote")]

2 つのリストから目的のリストを取得するにはどうすればよいですか?

4

1 に答える 1