解析XML而没有名称空间

时间:2018-06-28 16:05:25

标签: r xml xbrl xml2

我正在尝试从xml(或更准确地说:xbrl)文件中提取信息,该文件引用了许多名称空间。我并不真正在乎命名空间,我更希望能够在不指定文件的情况下搜索文件。

这里是一个例子:

require(magrittr)
xml <-xml2::read_xml("http://regnskaber.virk.dk/21560853/ZG9rdW1lbnRsYWdlcjovLzAzLzdlLzk4L2JiLzg4L2NiNzctNDE2ZC1hOWJmLTkxN2QxZWRkMGY0Yg.xml")

此文件包含以下节点:

<cmn:IdentificationNumberOfAuditor contextRef=\"duration_IdentificationOfAuditorDimension_cmn_auditorIdentifier_only_1\">mne18078</cmn:IdentificationNumberOfAuditor>

我知道我可以使用  xml2 :: xml_find_all(xml,'// cmn:IdentificationNumberOfAuditor')

但这只是在我知道名称空间前缀的情况下,而且我不确定在我需要处理的成千上万个文件中,它们的名称是否相同。所以我希望它能起作用:

xml2::xml_find_all(xml2::xml_ns_strip(xml), '//IdentificationNumberOfAuditor')

因为我认为xml_ns_strip会删除名称空间信息的xml文件。但是,由于以下原因,xml_ns_strip实际上似乎什么也没做:

identical(xml %>% as.character(), xml_ns_strip(xml) %>% as.character())

返回true。

1 个答案:

答案 0 :(得分:0)

作为参考,我发现此问题的最佳解决方案是使用https://www.ibm.com/support/knowledgecenter/vi/SSEPGG_10.1.0/com.ibm.db2.luw.xml.doc/doc/r0054369.html中的xslt样式表

<h1>Find the sum of 1 to some number!</h1>
<form id="myForm" name="myForm">
  <input type="number" id="numInput" name="numInput" placeholder="Enter a positive number here" autofocus>
  <input type="text" id="sum" name="sum" disabled>
  <button type="button" onclick="showSum(parseInt(this.form.numInput.value));">Calculate! </button>
</form>