我正在尝试提取描述标记下的第二个链接。我写了下面的代码,但它看起来非常混乱的freads和子串(只是为了让它工作)。有没有更清洁的方法来实现这一目标?
魔法(URL) - >
Tag =“。xml”,
inets:开始(),
{ok,{Status,Headers,Body}} = httpc:request(Url ++ Tag),
{Xml,Rest} = xmerl_scan:string(Body),
{xmlObj,string,A} = xmerl_xpath:string(“substring-after(substring-after(substring-> before(// channel / item / description [1],'\”> [link]'),'br'),'href =')“,Xml),
{ok,_,B} = io_lib:fread(“~6s”,A),
的字符串:SUB_STRING(B,1,字符串:LEN(B)-1)
。
答案 0 :(得分:2)
不是一个完美的解决方案,但您可以使用这样的xpath
//channel/item/description[1]/text()[16]
和//channel/item/description[1]/text()[24]
提取的字符串在开头包含网址+引号,因此您可以使用列表匹配语法来剪切引号:[_|Url] = ...
所以使用这个:[{_,_,_,_,[_|U1],_}] = xmerl_xpath:string("//channel/item/description[1]/text()[16]", Xml).
将U1与第一个URL绑定。
在shell中测试:
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/"