Учебник по Showcase: Группировка и повтор значений

Материал из Course Orchestra
Перейти к: навигация, поиск

Внимание! Изложенная здесь информация устарела! В качестве учебника следует использовать https://share.curs.ru/webhelp/ (work in progress).


xml с данными:

<schema xmlns="">
   <info>
      <name id="" value="" consider="true"/>
      <name id="" value="" consider="true"/>
      <name id="" value="" consider="false"/>
      <name id="" value="" consider="true"/>
      <name id="" value="" consider="true"/>
      <name id="" value="" consider="true"/>
      <name id="" value="" consider="false"/>
      <action>
         <pok/>
         <pok/>
         <pok/>
      </action>
   </info>
</schema>

Шаблон:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="xsltforms/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events"
    xmlns:xf="http://www.w3.org/2002/xforms"> 
         
    <head>
        <xf:model id="mainModel">
            <xf:instance id="mainInstance">
                <schema xmlns=""/>
            </xf:instance>
        </xf:model>
    </head> 
    
    <body>
        <xf:repeat id="names1" nodeset="/schema/info/name[@consider = 'true']">
            <xf:output ref="'Номер п/п: ' + position() + ' '"/>
            <xf:input ref="./@id"/>
            <xf:input ref="./@value"/>
        </xf:repeat>
        <xf:group id="names2" ref="/schema/info/action[instance('mainInstance')/info/name[1]/@id = '1']">
            <xf:input ref="./pok[1]"/>
            <xf:input ref="./pok[2]"/>
            <xf:input ref="./pok[3]"/>
        </xf:group>
    </body>
    
</html>

Часто возникает ситуация, когда основной экземпляр xml содержит много повторяющихся узлов, при этом заранее неизвестно их точное количество. В такой ситуации бессмысленно прописывать отображающие контролы отдельно для каждого узла.

В подобной ситуации используется элемент xf:repeat. В атрибуте @nodeset прописывают множество всех отображаемых узлов. Ссылки на узлы во всех дочерних элементах в xf:repeat будут идти именно от него. Обратите внимание, кто к номеру текущего узла можно обратиться функцией position()

Для группировки значений также используют элемент xf:group. Ссылки на узлы во всех дочерних элементах в xf:group будут идти от узла, прописанного в ref. Чаще всего этот элемент используется для скрытия и отображения узлов в зависимости от каких-либо условий. Например, узлы /schema/info/action/pok отобразятся, если в /schema/info/name/@id будет проставлено значение 1