【发布时间】:2015-05-31 11:35:16
【问题描述】:
最亲爱的 StackOverflow 兄弟们,
我正在使用 EverNote 输出的 HTML,需要解析以下内容:
- 备注标题
- 笔记锚点(笔记本身的超链接标识)
- 笔记创建日期
- 备注内容,以及
- 笔记本内的超链接( 笔记内容中的链接到另一个笔记的锚点)
根据 [r] XML 包的作者和SO answer by @jdharrison 的作者examples by Duncan Temple Lang,我已经能够相对轻松地解析笔记标题、笔记锚点和笔记创建日期。对于那些可能感兴趣的人,这样做的命令是
require("XML")
rawHTML <- paste(readLines("EverNotebook.html"), collapse="\n") #Yes... this is noob code
doc = htmlTreeParse(rawHTML,useInternalNodes=T)
#Get Note Titles
html.titles<-xpathApply(doc, "//h1", xmlValue)
#Get Note Title Anchors
html.tAnchors<-xpathApply(doc, "//a[@name]", xmlGetAttr, "name")
#Get Note Creation Date
html.Dates<-xpathApply(doc, "//table[@bgcolor]/tr/td/i", xmlValue)
这是 HTML EverNote 导出示例的fiddle。
我一直在解析1。注意内容和2。笔记本内的超链接。
仔细查看代码,很明显第一部分的解决方案是返回每个不包含属性为 bgcolor="#D4DDE5" 的表的最上层* div。 这是如何实现的?
Duncan 说可以根据 NOT 条件使用 XPath 解析 XML:
“它允许我们表达诸如“找到所有名为 a 的节点”或“找到所有名为 a 且没有名为 b 的属性的节点”或“节点 a >具有等于 'bob' 的属性" 或 "找到所有节点 a 有 c 作为>一个祖先节点"
但是他没有继续描述 XML 包如何解析排除项......所以我被困在那里。
解决第二部分,考虑锚定到同一笔记本中其他笔记的格式:
<a href="#13178">
这些的目标是获取它们的编号,但这很困难,因为它们仅通过 # 前缀与 www 链接区分开来。关于如何通过部分匹配它们的值(在本例中为#)来解析这些特定锚点的信息很少——甚至可能需要 grep()。 如何使用 XML 包来解析这些特殊的 href? 我在这里描述了这两个问题,因为第一部分的解决方案可能有助于第二部分......但也许我错了。 有什么建议吗?
更新 1
最上面的 div 我想说的是最外面的 div。 EverNote HMTL 导出中每个笔记的内容都在 DOM 最外层的 div 中。因此,感兴趣的是返回不包含属性为 bgcolor="#D4DDE5" 的表的每个最外层 div。
【问题讨论】:
-
您能否也将所需的结果添加到帖子中
标签: html r xpath xml-parsing