Erlang 从XML中提取带有XPath的URL

Erlang 从XML中提取带有XPath的URL,erlang,Erlang,我正试图提取description标签下的第二个链接。我已经编写了下面的代码,但是它看起来确实有fread和子字符串(只是为了让它工作)。有没有更干净的方法来实现这一点 魔术(网址)-> Tag=“.xml” inets:start() {ok,{Status,Headers,Body}}=httpc:request(Url++标记) {Xml,Rest}=xmerl_scan:string(Body) {xmlObj,string,A}=xmerl\u xpath:string(“子字符串之

我正试图提取description标签下的第二个链接。我已经编写了下面的代码,但是它看起来确实有fread和子字符串(只是为了让它工作)。有没有更干净的方法来实现这一点

魔术(网址)->

Tag=“.xml”

inets:start()

{ok,{Status,Headers,Body}}=httpc:request(Url++标记)

{Xml,Rest}=xmerl_scan:string(Body)

{xmlObj,string,A}=xmerl\u xpath:string(“子字符串之后(子字符串->之前(//channel/item/description[],“\”>[link]”),“br'),“href=”),Xml)

{好的,{uu,B}=io_-lib:fread(“~6s”,A)

字符串:子字符串(B,1,字符串:len(B)-1)


这不是一个完美的解决方案,但您可以使用这样的XPath
//channel/item/description[1]/text()[16]
//channel/item/description[1]/text()[24]

提取的字符串在开头包含Url+引号,因此您可以使用列表匹配语法删除引号:
[\u124; Url]=…

因此,请使用以下内容:
[{{{,{,},{,{,},[{,},}]=xmerl\uxpath:string(“//channel/item/description[1]/text()[16]”,Xml)。
将U1与第一个url绑定

壳内试验:

11> [{_,_,_,_,[_|U1],_}] = xmerl_xpath:string("//channel/item/description[1]/text()[16]", Xml). 
[{xmlText,[{description,5},{item,5},{channel,1},{rss,1}],
          16,[],"\"http://www.reddit.com/user/escaped_reddit",text}]
12> 
12> U1.
"http://www.reddit.com/user/escaped_reddit"
13> 
13> 
13> [{_,_,_,_,[_|U2],_}] = xmerl_xpath:string("//channel/item/description[1]/text()[24]", Xml). 
[{xmlText,[{description,5},{item,5},{channel,1},{rss,1}],
          24,[],
          "\"http://www.reddit.com/r/erlang/comments/y62wf/how_to_use_ranch/",
          text}]
14> 
14> U2.
"http://www.reddit.com/r/erlang/comments/y62wf/how_to_use_ranch/"

你能发布一个从中获取xml的url吗?哇!这正是我想要的。XPath在我看来非常混乱,这个解决方案非常有意义!谢谢!