xquery fn: id не работает, хотя type = xs: id, кажется, объявлен правильно - PullRequest
0 голосов
/ 17 мая 2018

Я работаю над XSLT-преобразованием, которое выполняется на сервере с Altova.Мне нужно адаптировать некоторые вещи и работать локально с Oxgen, используя саксонский парсер.По некоторым причинам fn: id () не работает, он возвращает пустой узел.Объяснение довольно сложной настройки:

Мой ввод (input.xml):

<position id="pos_1">
    <protected>true</protected>
    <titel>Secret Business</titel>
    <entry id="entry_1">
        <title>Some Business</title>
        <year>2008</year>
    </entry>
</position>

Второй вход считывается в переменную (см. Ниже), это выглядит так (ProcessData.xml):

<goose:process-data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.goose.org" xmlns:goose="http://www.goose.org" xsi:schemaLocation="http://www.goose.org ProcessData.xsd">>
    <goose:Collection>
        <goose:Package id="entry_1">
            <goose:PID>1234-4321-asdf</goose:PID>
        </goose:Package>
 ....

Мой XSLT:

<!-- Reading in second input (process information) -->
<xsl:param name="process-data-path" select="xs:string('file:///home/documents/some/path/to/ProcessData.xml')"
<xsl:variable name="process-data" select="document($process-data-path)"
<!-- get the value of element <goose:PID> that corresponds to the id in 'input.xml' -->
<xsl:variable name="pid">
    <xsl:value-of select="fn:element-with-id(@id,$process-data)/goose:PID"/>
</xsl:variable>

Теперь я знаю, как правильно вводить элементы id (здесь https://stackoverflow.com/a/9269053/1717188 или здесь https://stackoverflow.com/a/6369296/1717188). Если я пишу xml:id в ProcessData.xml, он работает нормально. Но файл создается не так. И соответствующая схема (ProcessData.xsd) объявляет атрибут id следующим образом: <xs:attribute name="id" type="xs:ID" use="required"/>

За последние часы у меня было много идей, что может быть не так. Одна из них: type="xs:ID" как-то теряется при чтении дерева в переменную с document()?

...