在尝试使用YQL提供的Yahoo Query Language和xpath功能解析html时,我遇到了无法提取"text()"或属性值的问题.
例如
perma链接
select * from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
给出一个锚点列表为xml
Filling the text area with the text when a button is clicked...
现在,当我尝试使用提取节点值时
select * from html where url="http://stackoverflow.com" and xpath='//div/h3/a/text()'
我得到的结果是连接而不是节点列表,例如
Xcode: attaching to a remote process for debuggingWhy is b ……
如何将其分隔为节点列表以及如何选择属性值?
像这样的查询
select * from html where url="http://stackoverflow.com" and xpath='//div/h3/a[@href]'
给了我相同的查询结果 div/h3/a
YQL要求xpath表达式计算为itemPath而不是节点文本.但是,一旦有了itemPath,就可以从树中投射各种值
换句话说,ItemPath应该指向生成的HTML中的Node而不是文本内容/属性.当您从数据中选择*时,YQL将返回所有匹配的节点及其子节点.
例
select * from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
这将返回与xpath匹配的所有a.现在要投影文本内容,您可以使用它来投影
select content from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
"content"返回节点内保存的文本内容.
对于投影属性,可以相对于xpath表达式指定它.在这种情况下,因为你需要相对于a的href.
select href from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
如果您同时需要属性'href'和textContent,则可以执行以下YQL查询:
select href, content from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
收益:
double pointer const issue issue...
希望有所帮助.如果你对YQL有更多疑问,请告诉我.