Erlang 从XML中提取带有XPath的URL
我正试图提取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)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(“子字符串之
这不是一个完美的解决方案,但您可以使用这样的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在我看来非常混乱,这个解决方案非常有意义!谢谢!