Xbrl数据提取

时间:2016-12-13 15:21:49

标签: xbrl

有关a.newb的内容,但是我有大约15,000个带有XBRL数据的html文件。 我已经从http://download.companieshouse.gov.uk/en_monthlyaccountsdata.html下载了这些文件 理想情况下,我想从所有这些文件中提取与公司名称和无形资产相关的信息,但我不确定如何执行此操作。

理想情况下,我希望将数据导出到单个Excel文件中的列中。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

回答有点迟,但没关系。首先,您可以查看VT Fact Viewer。它可以为您提供文档中XBRL事实的网格显示,您可以将它们导出到Excel。在那里,你需要进行一些过滤,寻找像“核心:无形资产”或者“uk-gaap:无形......”之类的标签。

但是,如果您在许多文档(例如CH数据转储)上执行此操作,那么您将需要使用编程或脚本语言开始对您自己进行一些“正确”的xml处理。但是,观众仍然会有所帮助,因为它会向您展示您想要提取的东西。

作为一个简单示例,以下内容将为您提供CSV格式的无形资产数据,您可以在Excel中打开这些数据。 用C#编写(使用LINQPad),因此如果需要,您必须翻译:

string fname = @"C:\ch_data\Prod223_1770_00101234_20160331.html";
var doc = XDocument.Load(fname);
// The 'ix' namespace may use 2008 or 2013 schema so we'll just use the .LocalName property of the tag
var elements = doc.Root
    .Descendants()
    .Where(x => x.Name.LocalName == "nonFraction")
    .Where(x => x.Attributes().Any(a => a.Value.Contains("Intangible")));

var lines = new List<string>();
foreach (var element in elements)
{
    var attribs = element.Attributes();
    var ctx = attribs.FirstOrDefault(a => a.Name == "contextRef")?.Value ?? "";
    var dec = attribs.FirstOrDefault(a => a.Name == "decimals")?.Value ?? "";
    var scale = attribs.FirstOrDefault(a => a.Name == "scale")?.Value ?? "";
    var units = attribs.FirstOrDefault(a => a.Name == "unitRef")?.Value ?? "";
    var fmt = attribs.FirstOrDefault(a => a.Name == "format")?.Value ?? "";
    var name = attribs.FirstOrDefault(a => a.Name == "name")?.Value ?? "";
    var value = element.Value;

    string line = $"\"{ctx}\",\"{dec}\",\"{scale}\",\"{units}\",\"{name}\",\"{fmt}\",\"{value}\"";
    lines.Add(line);
    //Console.WriteLine(line);
}
File.WriteAllLines(Path.ChangeExtension(fname, "csv"), lines);

根据需要更改输入文件名以循环浏览目录或文件名列表。