I might be doing wrong, but for now I have the strong impression that \xmlchainatt is at fault. It does not break the callchain as soon as a match is found.
Also according the manual xml-mkiv, \xmlchainatt{#1}{testx}{no-test} should return "no-test" but returns nothing. I would very much helped if these macros react is I thin they should.
Is this my fault?
Hans van der Meer
Minimal example
% test chainttribute failure.
\startxmlsetups demo:chainatt
\xmlsetsetup{#1}{root|node|innernode}{demo:chainatt:*}
\stopxmlsetups
\xmlregisterdocumentsetup{demo}{demo:chainatt}
\startxmlsetups demo:chainatt:root
root: xmlatt <test> = <\xmlatt{#1}{test}>\crlf
root: xmlchainatt <test> = <\xmlchainatt{#1}{test}>\crlf
\xmlall{#1}{*}
\stopxmlsetups
\startxmlsetups demo:chainatt:node
-- node: xmlatt test = <\xmlatt{#1}{test}>\crlf
-- node: xmlchainatt <node> = \xmlchainatt{#1}{test}\crlf
-- node: xmlchainattdef <node> = \xmlchainattdef{#1}{notest}{no-test}\crlf
\stopxmlsetups
\startxmlsetups demo:chainatt:innernode
---- innernode: xmlatt test = <\xmlattdef{#1}{test}{nono}>\crlf
---- innernode: xmlchainatt <test> = \xmlchainatt{#1}{test}\crlf
\stopxmlsetups
\startbuffer[chainatt]
<root test="abc">
<node test="pqr">
<innernode test="xyz"/>
</node>
</root>
\stopbuffer
\starttext
\ConTeXt-version=\contextversion\blank
Manual on xml-mkiv page 22 on \tex{xmlchainatt} reads:
returns the value of attribute NAME or empty if no such attribute exists; backtracks till a match is found\blank
\xmlprocessbuffer{demo}{chainatt}{}\blank
However, does not stop when backtracking finds "a match".
\stoptext