Interestingly, we should be in the right subtree as this modified example is supposed to demonstrate (we’re getting the correct numbers under each index-entry-term, just the terms are incorrect in all but the first case):

 

\startxmlsetups xml:test

                \xmlsetsetup{#1}{*}{-}

                \xmlsetsetup{#1}{index}{xml:*}

                \xmlsetsetup{#1}{index-entry}{xml:index-entry}

                %\xmlsetsetup{#1}{index-entry}{xml:index-entry-2}

                \xmlsetsetup{#1}{term}{xml:index-entry-term}

                \xmlsetsetup{#1}{nav-pointer-group}{xml:*}

                \xmlsetsetup{#1}{nav-pointer}{xml:nav-pointer}

                \xmlsetsetup{#1}{nav-pointer/ext-link}{xml:nav-pointer-link}

\stopxmlsetups

 

\xmlregisterdocumentsetup{test}{xml:test}

 

% Index

 

\startxmlsetups xml:book-back

                \xmlflush{#1}

\stopxmlsetups

 

\startxmlsetups xml:index

  \startsectionlevel[title={\xmlfilter{#1}{/index-title-group/title/command(xml:index-title)}},]

                \xmlflush{#1}

  \stopsectionlevel

\stopxmlsetups

 

\startxmlsetups xml:index-title

                \xmlflush{#1}

\stopxmlsetups

 

\definedescription[indexentry]

                [alternative=top,

                headstyle=normal,

    headcommand=\hskip-1cm,

                margin=1cm,

                inbetween=,

                ]

 

\startxmlsetups xml:index-entry

                \xmlflush{#1}

\stopxmlsetups

   

\startxmlsetups xml:index-entry-2

    \xmlfilter{#1}{/term/command(xml:index-entry-term)}%

    \xmlverbatim{#1}

\stopxmlsetups

   

\startxmlsetups xml:index-entry-term

                \indexentry{\xmlflush{#1}}

\stopxmlsetups

 

\startxmlsetups xml:nav-pointer-group

                \xmlconcat{#1}{/nav-pointer}{, }

\stopxmlsetups

 

\startxmlsetups xml:nav-pointer

                \xmlflush{#1}

\stopxmlsetups

 

\startxmlsetups xml:nav-pointer-link

                \xmlflush{#1}

\stopxmlsetups

 

\startbuffer[test]

<?xml version="1.0" encoding="UTF-8"?>

<index>

      <index-title-group>

        <title>Index</title>

      </index-title-group>

      <index-entry>

        <term>First</term>

        <nav-pointer-group>

          <nav-pointer>

            <ext-link>1</ext-link>

          </nav-pointer>

          <nav-pointer>

            <ext-link>2</ext-link>

          </nav-pointer>

          <nav-pointer>

            <ext-link>3</ext-link>

          </nav-pointer>

        </nav-pointer-group>

      </index-entry>

      <index-entry>

        <term>Second</term>

        <nav-pointer-group>

          <nav-pointer>

            <ext-link>4</ext-link>

          </nav-pointer>

        </nav-pointer-group>

      </index-entry>

      <index-entry>

        <term>Third</term>

        <nav-pointer-group>

          <nav-pointer>

            <ext-link>5</ext-link>

          </nav-pointer>

          <nav-pointer>

            <ext-link>6</ext-link>

          </nav-pointer>

          <nav-pointer>

            <ext-link>7</ext-link>

          </nav-pointer>

        </nav-pointer-group>

      </index-entry>

</index>

\stopbuffer

 

 

\starttext

 

\xmlprocessbuffer{test}{test}{}

 

\stoptext

 

Von: denis.maier@unibe.ch <denis.maier@unibe.ch>
Gesendet: Montag, 24. Juli 2023 13:38
An: ntg-context@ntg.nl
Betreff: [NTG-context] xml: matches always child of other element

 

Hi,

 

I must be missing something obvious, but in this example the pattern for <term> always matches the first element, not the one under the current <index-entry>.

Interestingly, using xml:index-entry-2 instead of the normal version matches correctly… Any hints what is going off the rails here?

 

Best,

Denis

 

\startxmlsetups xml:test

                \xmlsetsetup{#1}{*}{-}

                \xmlsetsetup{#1}{index}{xml:*}

                \xmlsetsetup{#1}{index-entry}{xml:index-entry}

                %\xmlsetsetup{#1}{index-entry}{xml:index-entry-2}

                \xmlsetsetup{#1}{term}{xml:index-entry-term}

                \xmlsetsetup{#1}{nav-pointer-group}{xml:*}

                \xmlsetsetup{#1}{nav-pointer}{xml:nav-pointer}

                \xmlsetsetup{#1}{nav-pointer/ext-link}{xml:nav-pointer-link}

\stopxmlsetups

 

\xmlregisterdocumentsetup{test}{xml:test}

 

% Index

 

\startxmlsetups xml:book-back

                \xmlflush{#1}

\stopxmlsetups

 

\startxmlsetups xml:index

  \startsectionlevel[title={\xmlfilter{#1}{/index-title-group/title/command(xml:index-title)}},]

                \xmlflush{#1}

  \stopsectionlevel

\stopxmlsetups

 

\startxmlsetups xml:index-title

                \xmlflush{#1}

\stopxmlsetups

 

\definedescription[indexentry]

                [alternative=top,

                headstyle=normal,

    headcommand=\hskip-1cm,

                margin=1cm,

                inbetween=,

                ]

 

\startxmlsetups xml:index-entry

                \xmlflush{#1}

\stopxmlsetups

   

\startxmlsetups xml:index-entry-2

    \xmlfilter{#1}{/term/command(xml:index-entry-term)}%

    \xmlverbatim{#1}

\stopxmlsetups

   

\startxmlsetups xml:index-entry-term

                \indexentry{\xmlflush{#1}}

\stopxmlsetups

 

\startxmlsetups xml:nav-pointer-group

                \xmlconcat{#1}{/nav-pointer}{, }

\stopxmlsetups

 

\startxmlsetups xml:nav-pointer

                \xmlflush{#1}

\stopxmlsetups

 

\startxmlsetups xml:nav-pointer-link

                \xmlflush{#1}

\stopxmlsetups

 

\startbuffer[test]

<?xml version="1.0" encoding="UTF-8"?>

<index>

      <index-title-group>

        <title>Index</title>

      </index-title-group>

      <index-entry>

        <term>First</term>

        <nav-pointer-group>

          <nav-pointer>

            <ext-link>1</ext-link>

          </nav-pointer>

          <nav-pointer>

            <ext-link>2</ext-link>

          </nav-pointer>

          <nav-pointer>

            <ext-link>3</ext-link>

          </nav-pointer>

        </nav-pointer-group>

      </index-entry>

      <index-entry>

        <term>Second</term>

        <nav-pointer-group>

          <nav-pointer>

            <ext-link>1</ext-link>

          </nav-pointer>

        </nav-pointer-group>

      </index-entry>

      <index-entry>

        <term>Third</term>

        <nav-pointer-group>

          <nav-pointer>

            <ext-link>1</ext-link>

          </nav-pointer>

        </nav-pointer-group>

      </index-entry>

</index>

\stopbuffer

 

\starttext

 

\xmlprocessbuffer{test}{test}{}

 

\stoptext