Orbeon: как отображать динамические выпадающие значения из ресурса файловой системы

Я новичок в Orbeon и пытаюсь реализовать динамический раскрывающийся список, где значения заполняются из XML-поиска в файловой системе.

Итак, вот требование: первый выпадающий список (Animal) будет иметь 2 значения: Cat и Dog. В зависимости от выбора, второй выпадающий список (Породы) будет отображать список пород.

2 xml файла, содержащие породы, зарегистрированы как ресурсы и выглядят так:

CAT: \ forms \ quote \ lookup \ catbreeds.xml

<?xml version="1.0" encoding="UTF-8"?>
<breeds>
    <item>
        <value>C1</value>
        <label>Domestic Long Hair</label>
    </item>
    <item>
        <value>C2</value>
        <label>Domestic Medium Hair</label>
    </item>
    <item>
        <value>C3</value>
        <label>Domestic Short Hair</label>
    </item>
    <item>
        <value>C4</value>
        <label>Mixed Breed</label>
    </item>
    <item>
        <value>C5</value>
        <label>Tabby</label>
    </item>
    <item>
        <value>C6</value>
        <label>Abyssinian</label>
    </item>
    <item>
        <value>C7</value>
        <label>American Bobtail</label>
    </item>
</breeds>

СОБАКА: \ формы \ цитата \lookup\dogbreeds.xml

<?xml version="1.0" encoding="UTF-8"?>
<breeds>
    <item>
        <value>D1</value>
        <label>Cavapoo</label>
    </item>
    <item>
        <value>D2</value>
        <label>Cockapoo</label>
    </item>
    <item>
        <value>D3</value>
        <label>Crossbreed</label>
    </item>
    <item>
        <value>D4</value>
        <label>Goldendoodle</label>
    </item>
    <item>
        <value>D5</value>
        <label>Labradoodle</label>
    </item>
    <item>
        <value>D6</value>
        <label>Maltipoo</label>
    </item>
    <item>
        <value>D7</value>
        <label>Mi Ki</label>
    </item>
</breeds>

Form.xml выглядит так:

Модель:

<xf:instance id="fr-form-instance" xxf:exclude-result-prefixes="#all">
<form>
    <section-1>
        <animal/>
        <breed/>
    </section-1>
</form>
</xf:instance>
<xf:instance id="pets"
    xmlns="">
    <root>
        <item name="Cat" value="cat"/>
        <item name="Dog" value="dog"/>
    </root>
</xf:instance>

Тело:

<xh:body>
<fr:view>
    <fr:body
        xmlns:oxf="http://www.orbeon.com/oxf/processors"
        xmlns:p="http://www.orbeon.com/oxf/pipeline"
        xmlns:xbl="http://www.w3.org/ns/xbl">
        <fr:section id="section-1-control" class="no-header-section" bind="section-1-bind">
            <fr:grid>
                <xh:tr>
                    <xh:td>
                        <fr:dropdown-select1 id="animal-control" ref="animal" bind="breed-bind">
                            <xf:label ref="$form-resources/animal/label"/>
                            <xf:itemset ref="instance('pets')/item">
                                <xf:label ref="@name"/>
                                <xf:value ref="@value"/>
                            </xf:itemset>
                        </fr:dropdown-select1>
                    </xh:td>
                </xh:tr>
                <xh:tr>
                    <xh:td>
                        <fr:dropdown-select1 id="breed-control" bind="breed-bind">
                            <xf:label ref="$form-resources/breed/label"/>
                            <xf:itemset
                                        ref="doc('oxf:/forms/quote/lookup/catbreeds.xml')/breeds/item">
                                <xf:label ref="label"/>
                                <xf:value ref="value"/>
                            </xf:itemset>
                        </fr:dropdown-select1>
                    </xh:td>
                </xh:tr>
            </fr:grid>
        </fr:section>
    </fr:body>
</fr:view>
</xh:body>

Теперь проблема заключается в атрибуте ref в ref = "doc ('oxf: / forms / quote / lookup /catbreeds.xml') / breeds / item">. Я могу загрузить отдельные списки (в этом случае загружаются породы кошек), но я не могу найти способ сделать его условным.

Я обнаружил, что не могу использовать XPath для ref (как это: oxf: / forms / quote / lookup / {animal} breeds.xml), чтобы сделать значение динамическим.

Я много чего пробовал, но ничего не получалось. Это будет очень полезно, если кто-то может дать мне направление. Я на Orbeon 4.8

1 ответ

Поскольку значение ref XPath, вы можете создать URL, который вы передаете doc() динамически, делая что-то вроде этого:

doc(concat(
    'oxf:/forms/quote/lookup/',
    instance('fr-form-instance')/section-1/animal,
    'breeds.xml'
))/breeds/item
Другие вопросы по тегам