0

我正在尝试使用这样的XQuery搜索BaseX

XQUERY doc("ann-20140201.xml")//xbrl

我正在提交原始实例的一小段摘录:

<?xml version="1.0" encoding="US-ASCII"?>
<xbrli:xbrl xmlns:ann="http://www.anninc.com/20140201" xmlns:dei="http://xbrl.sec.gov/dei/2013-01-31" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:us-gaap="http://fasb.org/us-gaap/2013-01-31" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <link:schemaRef xlink:href="ann-20140201.xsd" xlink:type="simple" />
  <xbrli:context id="FD2011Q4YTD">
    <xbrli:entity>
      <xbrli:identifier scheme="http://www.sec.gov/CIK">0000874214</xbrli:identifier>
    </xbrli:entity>
    <xbrli:period>
      <xbrli:startDate>2011-01-30</xbrli:startDate>
      <xbrli:endDate>2012-01-28</xbrli:endDate>
    </xbrli:period>
  </xbrli:context>
  <xbrli:context id="FD2011Q4YTD_ann_EarningsPerShareReconciliationAxis_ann_EarningsPerShareBasic.Member">
    <xbrli:entity>

但是,即使很明显<xbrl>是我执行查询时的BaseX元素,它什么也不返回!

当等效命令返回根目录时,怎么可能不返回任何内容?

等效的命令是:

XQUERY doc("ann-20140201.xml")//*
4

3 回答 3

6

As the previous answer have already shown, you need to specify the namespace URI. This is one more way to do it:

doc("ann-20140201.xml")//Q{http://www.xbrl.org/2003/instance}xbrl

If you are a lazy typer, you may as well use a wildcard:

doc("ann-20140201.xml")//*:xbrl
于 2014-06-09T16:30:30.240 回答
5

你的根元素是{http://xbrl.org/2003/instance}xbrl. 您的查询正在寻找xbrl. 他们不是一回事。

尝试:

declare namespace xbrli=http://xbrl.org/2003/instance;
doc("ann-20140201.xml")//xbrli:xbrl
于 2014-06-09T16:09:33.023 回答
4

这是一个命名空间问题。如果组合来自不同来源的 XML,命名空间尤其重要,例如。在 RSS 提要中嵌入 (X)HTML,其中某些元素可能具有相同的名称但具有不同的含义。

要解决此问题,请注册并使用此命名空间:

declare namespace xbrli = "http://www.xbrl.org/2003/instance";
doc("ann-20140201.xml")//xbrli:xbrl

如果您想继续使用命令输入字段,可以将这两行合并为一行。

于 2014-06-09T16:12:44.370 回答