解析未转义的HTML并使用XML库检索标记值

时间:2014-10-24 07:45:54

标签: r xpath xml-parsing escaping html-parsing

我正在使用R包XML来加载和解析HTML页面。我可以使用XPath成功导航到我想要的代码片段。但是,有问题的HTML页面似乎不使用转义字符。作为示例,请考虑以下HTML代码:

<tr>
  <td width=\"50%\"><font size=\"1\" face=\"Arial, Helvetica, sans-serif\">MnO</font></td>
  <td width=\"50%\" align=\"right\"><font size=\"1\" face=\"Arial, Helvetica, sans-serif\">
         <0.05 % <BR>
               </font>
  </td>
</tr>

请注意我们如何使用“&lt; 0.05%”代替"&lt;0.05 %"。当我解析文档时,我得到的是两个“\ r \ n”。我现在看到的唯一解决方案是搜索并替换这些子串。我试图以各种方式加载文件,看看我们是否可以“反向”逃避文件,但没有成功。我还寻找了一些解析选项,可以考虑这些未转义的字符,但没有找到任何。

有没有人知道以一般方式处理这个问题的方法。如果没有,你会如何解决这个问题。

注意:我认为XML包使用libxml C库。

编辑:可以在此处找到一个示例:

http://rop.ineti.pt/rop/FormProduto.php?idProduto=166

(见化学成分右下表)

1 个答案:

答案 0 :(得分:0)

以下是否有帮助?我没有使用gsub()调用来清理列表,但您可能会发现它们很有帮助。此外,您的语言编码可能与我的不同(英语)。

table <- readHTMLTable("http://rop.ineti.pt/rop/FormProduto.php?idProduto=166", useInternal = TRUE)

#table&lt; - gsub(&#34; ^ [[:alnum:] | [:space:] | [:ascii:]] $&#34;,&#34;&#34;,perl = TRUE,table)#if not alnum,space或ascii,empty string; PUNCT?    #table&lt; - gsub(&#34; [[:punct:]]&#34;,&#34;&#34;,perl = TRUE,table)
   #table&lt; - gsub(&#34; \ n | \ t | \ r&#34;,&#34;&#34;,perl = TRUE,table)

table[20]

> table[20]
$`NULL`
           Al2O3 14.64 %
1            CaO  0.58 %
2  Fe2O3 (total)  1.44 %
3           H2O+  0.78 %
4           H2O-  0.05 %
5            K2O  4.89 %
6            MgO  0.17 %
7            MnO        
8           Na2O  3.45 %
9           P2O5  0.45 %
10          SiO2 73.23 %
11          TiO2  0.24 %