从XBRL获取属性值,并在其上定义命名空间

时间:2013-07-30 15:17:05

标签: xml xpath xquery

<!-- Mapping from Excel to XBRL -->
<xbrl xmlns="http://www.xbrl.org/2003/instance" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:ifrs="http://xbrl.ifrs.org/taxonomy/2013-03-28/ifrs">
<link:schemaRef xlink:type="simple" xlink:href="IFRS\ifrs-cor_2013-03-28.xsd"/>
<!-- Contexts -->
<context id="D-2063">
    <entity>
        <identifier scheme="http://www.cro.gov.np">CRO</identifier>
    </entity>
    <period>
        <startDate>2063-04-01</startDate>
        <endDate>2064-03-31</endDate>
    </period>
</context>
<context id="I-2063">
    <entity>
        <identifier scheme="http://www.cro.gov.np">CRO</identifier>
    </entity>
    <period>
        <instant>2064-03-31</instant>
    </period>
</context>
<!-- Units -->
<unit id="U-Monetary">
    <measure>iso4217:NPR</measure>
 </unit>  
<!-- Fact values -->  
<ifrs:Assets contextRef="I-2063" unitRef="U-Monetary" decimals="0">7954664475</ifrs:Assets>
</xbrl>  

上面给出的是基于XML的XBRL文件的示例。我想从ifrs:Assets的FactValue中选择contextRef的属性值。正如我们所看到的,我们定义了名称空间,普通的xquery和简单的xpath不起作用。所以,我用过

  xquery version "3.0";
  let $x:=doc("/db/Siddhartha/2061.xml")
  return $x/*[local-name()="xbrl"]/*[local-name()="Assets"][@contextRef]

但预计I-2063的价值并没有上升。 如何从上面的文件中获取属性contextRef的值?

1 个答案:

答案 0 :(得分:2)

如果要返回属性的值,请使用$x/*[local-name()="xbrl"]/*[local-name()="Assets"]/@contextRef/string()

当然XQuery还允许您处理命名空间,因此您不需要local-name()“hacks”:

xquery version "3.0";
declare default element namespace "http://www.xbrl.org/2003/instance";
declare namespace ifrs = "http://xbrl.ifrs.org/taxonomy/2013-03-28/ifrs";
let $x:=doc("/db/Siddhartha/2061.xml")
return $x/xbrl/ifrs:Assets/@contextRef/string()