Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 提取名称空间,并将其';来自最外层元素的URI_Xml_Xpath_Xquery_Extract_Text Extraction - Fatal编程技术网

Xml 提取名称空间,并将其';来自最外层元素的URI

Xml 提取名称空间,并将其';来自最外层元素的URI,xml,xpath,xquery,extract,text-extraction,Xml,Xpath,Xquery,Extract,Text Extraction,我试图提取XML实例最外层元素中两个属性的值。这些属性是: xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:us-gaap="http://xbrl.us/us-gaap/2009-01-31" 到目前为止,使用XQuery还没有得到回报,因为: 您必须在写下查询之前声明名称空间以执行此任务,并且URI并不总是相同的 像这样的命令: declare namespace xbrli="http://www.xbrl.org/2003/i

我试图提取XML实例最外层元素中两个属性的值。这些属性是:

xmlns:xbrli="http://www.xbrl.org/2003/instance"
xmlns:us-gaap="http://xbrl.us/us-gaap/2009-01-31"
到目前为止,使用XQuery还没有得到回报,因为:

  • 您必须在写下查询之前声明名称空间以执行此任务,并且URI并不总是相同的
  • 像这样的命令:

    declare namespace xbrli="http://www.xbrl.org/2003/instance";
    doc("oba.xml")/xbrli:xbrl/string(@us-gaap)
    
    …仍然没有结果

  • 我愿意接受任何尽可能严格的方法,并且可以从任何实例文档的最外层元素可靠地提取所选名称空间

    最外层的元素是:

    <xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:aem="http://www.agnico-eagle.com/20091231" xmlns:dei="http://xbrl.us/dei/2009-01-31" xmlns:dei-std="http://xbrl.us/dei-std/2009-01-31" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:ref="http://www.xbrl.org/2006/ref" xmlns:us-gaap="http://xbrl.us/us-gaap/2009-01-31" xmlns:us-gaap-all="http://xbrl.us/us-gaap-all/2009-01-31" xmlns:us-gaap-std="http://xbrl.us/us-gaap-std/2009-01-31" xmlns:us-roles="http://xbrl.us/us-roles/2009-01-31" xmlns:us-types="http://xbrl.us/us-types/2009-01-31" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    

    这些是名称空间声明,而不是属性

    在XQuery 1.0中可能类似于以下内容:

    declare namespace xbrli="http://www.xbrl.org/2003/instance";
    
    let $xbrl := fn:doc("oba.xml")/xbrli:xbrl
    let $prefixes := fn:in-scope-prefixes($xbrl)
    return
        for $prefix in $prefixes
        return
            fn:namespace-uri-for-prefix($prefix, $xbrl)
    

    下面的进一步跟进基于以下评论:“我需要的东西将字面上只采取最外层的元素,并逐步搜索它,并给每个前缀一个URI。感谢您的巨大帮助。”和“我需要一些非常严格的东西,所以我不能在上面声明名称空间xbrli。就我而言,XBRL在任何地方都不稳定,因此在另一个实例上获取可能更改的URI可能会产生相当大的问题:


    亲爱的@adamretter我已经测试了你的解决方案。我没有时间为我的延迟响应感到抱歉。我需要一些非常严格的东西,所以我不能
    在那里声明名称空间xbrli
    。就我而言,XBRL在任何地方都不稳定,所以在另一个实例上使用可能发生变化的
    URI
    可能会产生相当大的问题。我需要一些它将只获取最外层的元素,一步一步地搜索它,并为每个前缀提供一个URI。感谢您的大力帮助。
    let $outer-most := fn:doc("oba.xml")/element()
    let $prefixes := fn:in-scope-prefixes($outer-most)
    return
        for $prefix in $prefixes
        return
            fn:namespace-uri-for-prefix($prefix, $outer-most)