Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 XQuery中的排序:嵌套FLWOR_Xml_Nested_Xquery_Parent_Flwor - Fatal编程技术网

Xml XQuery中的排序:嵌套FLWOR

Xml XQuery中的排序:嵌套FLWOR,xml,nested,xquery,parent,flwor,Xml,Nested,Xquery,Parent,Flwor,我正在尝试使用XQuery对XML文档进行排序。第一级排序由父元素之一进行 第二级排序是链接的子元素之一 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FEATURES xmlns="http://www.example.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSche

我正在尝试使用XQuery对XML文档进行排序。第一级排序由父元素之一进行

第二级排序是链接的子元素之一

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FEATURES xmlns="http://www.example.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <FEATURE>
        <abbreviation>CANAL</abbreviation>
        <LINKED_PROPERTIES>
            <LP>
                <abbreviation>zltinf</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>altalt</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>betbet</abbreviation>
                <category>C</category>
                <remarks />
            </LP>
        </LINKED_PROPERTIES>
        <description>Water Canal</description>
        <code>23</code>
        <relation_type />
    </FEATURE>
    <FEATURE>
        <abbreviation>AREA</abbreviation>
        <LINKED_PROPERTIES>
            <LP>
                <abbreviation>zltzlt</abbreviation>
                <category>A</category>
                <remarks>zolt zolt</remarks>
            </LP>
            <LP>
                <abbreviation>altalt</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>betbet</abbreviation>
                <category>C</category>
                <remarks />
            </LP>
        </LINKED_PROPERTIES>
        <description>Area under administration</description>
        <code>1</code>
        <relation_type />
    </FEATURE>
    <FEATURE>
        <abbreviation>BUOY</abbreviation>
        <LINKED_PROPERTIES>
            <LP>
                <abbreviation>zltinf</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>altalt</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>betbet</abbreviation>
                <category>C</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>infinf</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>altalt</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>betbet</abbreviation>
                <category>C</category>
                <remarks />
            </LP>
        </LINKED_PROPERTIES>
        <description>Buoy on water</description>
        <code>18</code>
        <relation_type />
    </FEATURE>
    <FEATURE>
        <abbreviation>DRONE</abbreviation>
        <LINKED_PROPERTIES>
            <LP>
                <abbreviation>zltinf</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>beltam</abbreviation>
                <category>A</category>
                <remarks />
            </LP>
            <LP>
                <abbreviation>betbet</abbreviation>
                <category>C</category>
                <remarks />
            </LP>
        </LINKED_PROPERTIES>
        <description>Drones Inland</description>
        <code>2</code>
        <relation_type />
    </FEATURE>
</FEATURES>
本文档包含两个级别的功能,属于标准。因此,显然我无法修改XML文档。以上数据为匿名数据

我的XQuery如下所示

<FEATURES xmlns="http://www.example.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    {
    let $doc := doc("features.xml")
    for $feature in $doc/FEATURES/FEATURE
    order by $feature/abbreviation ascending
    return
    <FEATURE>
        {
        for $ft in $feature
        return if ($ft/child::element/name() eq
        "LINKED_PROPERTIES")then
        <LINKED_PROPERTIES_XXXXXXXX>{
            for $lp in $ft/LINKED_PROPERTIES/LP
            order
            by $lp/abbreviation ascending
            return $lp
            }
        </LINKED_PROPERTIES_XXXXXXXX>
        else $ft/*}
    </FEATURE>
    }
</FEATURES>

{
让$doc:=doc(“features.xml”)
对于$doc/FEATURES/feature中的$feature
按$feature/缩写升序订购
返回
{
美元功能中的美元英尺
如果($ft/child::element/name()相等,则返回
“链接的_属性”)然后
{
对于$ft/LINKED_PROPERTIES/lp中的$lp
秩序
按$lp/升
返回$lp
}
else$ft/*}
}
我无法在子级获得适当的相等条件,因此无法在子级获得所需的排序


出于几个原因,我不想回到DOM/XSL。请协助。

如果您想测试
功能
是否具有链接的chid元素
属性

return if ($ft/LINKED_PROPERTIES) then 
    <LINKED_PROPERTIES_XXXXXXXX>
    {
        .....
    }
    </LINKED_PROPERTIES_XXXXXXXX>
如果返回($ft/LINKED_属性),则返回
{
.....
}

您的XQuery尝试没有多大意义,它永远不会计算为true,因为它会查找名为
元素
$ft/child::element
)的子元素,并进一步测试元素名称是否等于
“LINKED\u PROPERTIES”
/name()eq“LINKED\u PROPERTIES”
)。此外,在树的更下方,必须删除链接的属性,因为$ft已经在该节点上,其他子节点必须按原样返回。最后,种类测试不太正确(必须是
child::element()

{
让$doc:=doc(“features.xml”)
对于$doc/FEATURES/feature中的$feature
按$feature/缩写升序订购
返回{
对于$feature/child::element()中的$ft child
返回if($ft child/name()eq“LINKED_PROPERTIES”)
然后{
对于$lp,在$ft儿童/lp中
按$lp/L订购
返回$lp
}
其他$ft儿童
}
}

上述查询在氧气中成功。

我尝试了BaseH,因为我没有氧气。我观察到的是,在运行xquery之后,父特征元素与子链接属性混合在一起。xquery是标准化的,它也应该与BaseX一起工作。如果仍然有错误,请随意粘贴您的查询和输出,以及您的预期输出。我们很乐意帮忙。
<FEATURES xmlns="http://www.example.com/"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">{
  let $doc := doc("features.xml")
  for $feature in $doc/FEATURES/FEATURE
  order by $feature/abbreviation ascending
  return <FEATURE>{
    for $ft-child in $feature/child::element()
    return if ($ft-child/name() eq "LINKED_PROPERTIES")
           then <LINKED_PROPERTIES_XXXXXXXX>{
             for $lp in $ft-child/LP
             order by $lp/abbreviation ascending
             return $lp
            }</LINKED_PROPERTIES_XXXXXXXX>
            else $ft-child
  }</FEATURE>
}</FEATURES>