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>