我是xquery菜鸟,正在“测试”代码
对我来说,在具体内容中过滤一个xml是不可能的。 我不确定,但是第一个TAG似乎有问题,它包含一个属性,而且可能是我解析错误...
XML示例
<findToFileResponse xmlns="xmlapi_1.0">
<equipment.PhysicalPort>
<mtuValue>9728</mtuValue>
<userLabel>RIOXXXX</userLabel>
<displayedName>Port 1/1</displayedName>
<siteId>10.10.10.1</siteId>
<siteName>LO0015P1</siteName>
<children-Set>
<ethernetequipment.EthernetPortSpecifics>
<actualDuplex>fd1000</actualDuplex>
<children-Set></children-Set>
</ethernetequipment.EthernetPortSpecifics>
</children-Set>
</equipment.PhysicalPort>
<equipment.PhysicalPort>
<mtuValue>9728</mtuValue>
<userLabel>RIOXXXX</userLabel>
<displayedName>Port 1/2</displayedName>
<siteId>10.10.10.10</siteId>
<siteName>LO0015P1</siteName>
<children-Set>
<ethernetequipment.EthernetPortSpecifics>
<actualDuplex>fd1000</actualDuplex>
<children-Set></children-Set>
</ethernetequipment.EthernetPortSpecifics>
</children-Set>
</equipment.PhysicalPort>
</findToFileResponse>
例如,此xquery(Im测试中,对象与具有相同第一个TAG的其他xml联接):
let $docu1 := doc("ListadoVanos.Mon_Jan_14_040000_CET_2019.xml")/findToFileResponse
return $docu1
我期望类似:
<equipment.PhysicalPort>
<mtuValue>9728</mtuValue>
<userLabel>RIOXXXX</userLabel>
<displayedName>Port 1/1</displayedName>
<siteId>10.10.10.1</siteId>
<siteName>LO0015P1</siteName>
<children-Set>
<ethernetequipment.EthernetPortSpecifics>
<actualDuplex>fd1000</actualDuplex>
<children-Set></children-Set>
</ethernetequipment.EthernetPortSpecifics>
</children-Set>
</equipment.PhysicalPort>
<equipment.PhysicalPort>
...
</equipment.PhysicalPort>
<equipment.PhysicalPort>
...
</equipment.PhysicalPort>
...
但要回答一个空结果
有什么主意吗?你能帮我建立第一个过滤器吗?
预先感谢
我使用BaseX。这是该信息:
Compiling:
- pre-evaluate fn:doc(uri) to document-node() item: doc("ListadoVanos.Mon_Jan_14_040000_CET_... -> document-node {"ListadoVanos.Mon_Jan_14_...
- remove unknown element/attribute findToFileResponse
- pre-evaluate iter path to empty sequence: document-node {"ListadoVanos.Mon_Jan_14_... -> ()
- inline $docu1_0
- simplify FLWOR expression: ()
Optimized Query:
()
Query:
let $docu1 := doc("ListadoVanos.Mon_Jan_14_040000_CET_2019.xml")/findToFileResponse return $docu1
Result:
- Hit(s): 0 Items
- Updated: 0 Items
- Printed: 0 b
- Read Locking: ListadoVanos.Mon_Jan_14_040000_CET_2019.xml
- Write Locking: (none)
Timing:
- Parsing: 0.26 ms
- Compiling: 123.72 ms
- Evaluating: 0.17 ms
- Printing: 0.01 ms
- Total Time: 124.17 ms
Query plan:
<QueryPlan compiled="true" updating="false">
<Empty size="0" type="empty-sequence()"/>
</QueryPlan>
答案 0 :(得分:2)
您遇到了一个常见问题:选择名称空间中的XML。选择/findToFileResponse
时,正在选择名为findToFileResponse
的元素,但是由于未指定名称空间前缀,因此假定您要选择不带名称空间的元素,这很常见。
但是,您可以看到XML文档在名称空间中,因为它使用了default namespace attribute,这导致其自身及其所有后代都包含在该名称空间中(除非另有说明):
xmlns="xmlapi_1.0"
要在此命名空间中选择一个元素,首先需要在XQuery prolog中declare it and assign it to a prefix:
declare namespace api = "xmlapi_1.0";
现在您可以使用前缀选择该名称空间中的元素:
/api:findToFileResponse
您还可以使用通配符前缀选择任何名称空间中的元素:
/*:findToFileResponse