Xml R:从HTML文档中删除HREF属性
花了整整一个下午的时间试图实现看似难以置信的简单 我需要反复浏览许多网页,删除任何锚Xml R:从HTML文档中删除HREF属性,xml,r,xpath,Xml,R,Xpath,花了整整一个下午的时间试图实现看似难以置信的简单 我需要反复浏览许多网页,删除任何锚标记的href=“…”部分,以便在我将这些标记转换为PDF以用作在线评估任务时,它们不再可单击 对我来说,最明显的方法是加载HTML文件,解析它,然后gsub输出href位,但使用类似于 uri <- "myPage.html" doc.parsed <- htmlTreeParse(uri, encoding = "UTF-8", useInternal=TRUE) # parse
标记的href=“…”
部分,以便在我将这些标记转换为PDF以用作在线评估任务时,它们不再可单击
对我来说,最明显的方法是加载HTML文件,解析它,然后gsub
输出href位,但使用类似于
uri <- "myPage.html"
doc.parsed <- htmlTreeParse(uri, encoding = "UTF-8", useInternal=TRUE) # parse HTML into tree structure
doc.anchors = unlist(xpathApply(doc.parsed, "//a"), xmlValue)
doc.anchors = gsub("href='([^\"]*)'", ' ', doc.anchors)
*Q.关于如何将这些更新的节点应用回
原始html文件?*
如果你有一个非R的解决方案,请发布它,如果我能把它翻译成R,我会的,但它仍然可能对其他人有用
假设HTML一开始是格式良好的,或者可以整理,那么可以使用非常简单的XSLT样式表来转换文档
XSLT样式表
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="a/@href"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>
据我所知,您可以将XSLT转换与R一起应用,只需找到一个可以进行转换的包。这辆车怎么样?也许你会发现这很有用。你需要在R中使用这个吗?您可以使用类似XSLT的东西吗?如果HTML是格式良好的XML,或者可以整理,那就很简单了。作为我博士学位的一部分,我试图在R中构建一个相当大的工作流。如果你有一个非R的解决方案,请发布它,如果我能把它翻译成R,我会的,但它仍然可能对其他人有用。
uri <- "myPage.html"
doc.parsed <- htmlTreeParse(uri, encoding = "UTF-8", useInternal=TRUE) # parse HTML into tree structure
doc.root <- xmlRoot(doc.parsed)
doc.body <- xmlChildren(doc.root)$body
doc.nodes <- getNodeSet(doc.body, "//a[@href]")
sapply(doc.nodes, function(el) removeAttributes(el))
[[1]]
<a>Some link text</a>
[[2]]
<a>Africa</a>
[[3]]
<a>Arabic</a>
[[4]]
<a>Argentina</a>
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="a/@href"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>