Как читать XML-файл в Xquery

Я пытаюсь прочитать XML-файл с помощью XQuery. После многих попыток в Google все, что я нашел актуальным, это функция doc(). Но это не работает для меня. Я сохранил мой XML-файл и Xquery в одной папке в Eclipse. Но Xquery выдает ошибку: строка 13, столбец 6: {err}XP0004: недопустимый статический тип: untypedDocument?

My Xquery:


     declare function xf:LookupXML($dvm1 as element(ns0:dvm),
        $DVMName as element(*),
        $SourceColumn as element(*))
        as element(*) {
             doc('CityCode.xml')     
    };

    declare variable $dvm1 as element(ns0:dvm) external;
    declare variable $DVMName as element(*) external;
    declare variable $SourceColumn as element(*) external;

    xf:LookupXML($dvm1,
        $DVMName,
        $SourceColumn)

My xml file:- Name- CityCode.xml

<?xml version="1.0" encoding="UTF-8"?>
<tns:dvm name="" xmlns:tns="http://www.example.org/SuburbCode" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/SuburbCode SuburbCode.xsd ">
  <tns:columns>
    <tns:column name="City"/>
    <tns:column name="Code"/>
  </tns:columns>
  <tns:rows>
    <tns:row>
      <tns:cell>Mumbai</tns:cell>
      <tns:cell>BOM</tns:cell>
    </tns:row>
     <tns:row>
      <tns:cell>Delhi</tns:cell>
      <tns:cell>DLH</tns:cell>
    </tns:row>
     <tns:row>
      <tns:cell>Banglore</tns:cell>
      <tns:cell>BLR</tns:cell>
    </tns:row>
  </tns:rows>
</tns:dvm>


If anyone knows please provide solution.

1 ответ

Вы объявляете свою функцию для возврата узла элемента, но она возвращает узел документа (функция doc() возвращает узел документа, который, в свою очередь, является последовательностью возврата для вашей функции).

Из сообщения об ошибке кажется, что запрос даже не оценивается, он завершается неудачно при компиляции, поскольку статический анализ сообщает компилятору, что он никогда не сможет завершиться успешно.

В зависимости от того, чего вы хотите достичь, вы можете сказать, что ваша функция возвращает узел документа (используя as document-node()) вместо элемента или для возврата корневого элемента из документа с помощью следующего:

doc('CityCode.xml')/*
Другие вопросы по тегам