【问题标题】:XPath to XBRL filesXBRL 文件的 XPath
【发布时间】:2015-09-08 18:10:15
【问题描述】:

我正在尝试使用 XPath 从 XBRL 文件(可扩展业务报告语言)中提取一些信息,该文件基本上只是一个 XML 文件。

Here is an example file

该文件有多个命名空间声明,这些声明有时会因文件而异。

您能否帮助编写 XPath 以使用 C# 提取节点“dei:EntityRegistrantName”中的数据?

我在互联网上尝试了多篇文章,但无法弄清楚。

【问题讨论】:

    标签: c# .net xml xpath xbrl


    【解决方案1】:

    使用这个XML Library,我使用了一个简单的元素get。该库为我确定了命名空间:

    XElement root = XElement.Load(file); // or .Parse(string)
    var a = root.XPathElement("//dei:EntityRegistrantName");
    Console.WriteLine(a.ToString());
    

    输出为(为便于阅读而格式化):

    <dei:EntityRegistrantName 
        contextRef="eol_PE8528----1510-K0009_STD_365_20150630_0" 
        id="id_6568047_FBD9ABEE-63B9-43BD-B87B-EFE7CC59EFB0_1_400001"    
        xmlns:dei="http://xbrl.sec.gov/dei/2014-01-31">
        MICROSOFT CORPORATION
    </dei:EntityRegistrantName>
    

    【讨论】:

    • 这是一个很酷的库。但是,我可以获取所有匹配路径的节点吗?
    • XPath 扩展,获取所有节点。其中XPathElement 返回找到的第一个与搜索匹配的元素。
    【解决方案2】:

    只需使用 LINQ to XML 提供的查询方法即可:

    var doc = XDocument.Load(file);
    
    Namespace dei = "http://xbrl.sec.gov/dei/2014-01-31"
    
    var name = (string)doc.Descendants(dei + "EntityRegistrantName").Single();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多