reading a single element from XML
Dear list, I have the following sample: \startbuffer[demo] <html> <body> <div class="irrelevant"> <p>This is <span class="special">Only</span> a paragraph.</p> <p>This is another paragraph.</p> <p>This is another paragraph.</p> <p>This is another paragraph.</p> <p>This is another paragraph.</p> </div> </body> </html> \stopbuffer \startxmlsetups xml:initialize \xmlsetsetup{#1}{*}{-} \xmlsetsetup{#1} {html|body|div|p} {xml:flush} \xmlsetsetup{#1} {html/**/span[@class='special']} {xml:special} \stopxmlsetups \xmlregistersetup{xml:initialize} \startxmlsetups xml:flush \xmlflush{#1} \stopxmlsetups \startxmlsetups xml:special \bgroup\bfd\ssd\xmlflush{#1}\egroup \stopxmlsetups \starttext \xmlprocessbuffer{main}{demo}{} \stoptext How can I select only <span class="special">? I mean, how can I have "Only" and nothing more in the output PDF document? I thought that lpath "html/**/span[@class='special']" would work, but I don’t know what I’m missing. Many thanks for your help, Pablo -- http://www.ousia.tk
\xmlfilter is your friend: \startxmlsetups xml:initialize \xmlsetsetup{#1}{html}{xml:gen} \stopxmlsetups \xmlregistersetup{xml:initialize} \startxmlsetups xml:gen \xmlfilter{#1}{/**/span[@class='special']/command(xml:special)} \stopxmlsetups \startxmlsetups xml:special \bgroup\bfd\ssd\xmlflush{#1}\egroup \stopxmlsetups Best wishes, Taco
On 16 Aug 2020, at 11:02, Pablo Rodriguez
wrote: Dear list,
I have the following sample:
\startbuffer[demo] <html> <body> <div class="irrelevant"> <p>This is <span class="special">Only</span> a paragraph.</p> <p>This is another paragraph.</p> <p>This is another paragraph.</p> <p>This is another paragraph.</p> <p>This is another paragraph.</p> </div> </body> </html> \stopbuffer
\startxmlsetups xml:initialize \xmlsetsetup{#1}{*}{-}
\xmlsetsetup{#1} {html|body|div|p} {xml:flush}
\xmlsetsetup{#1} {html/**/span[@class='special']} {xml:special} \stopxmlsetups
\xmlregistersetup{xml:initialize}
\startxmlsetups xml:flush \xmlflush{#1} \stopxmlsetups
\startxmlsetups xml:special \bgroup\bfd\ssd\xmlflush{#1}\egroup \stopxmlsetups
\starttext \xmlprocessbuffer{main}{demo}{} \stoptext
How can I select only <span class="special">? I mean, how can I have "Only" and nothing more in the output PDF document?
I thought that lpath "html/**/span[@class='special']" would work, but I don’t know what I’m missing.
Many thanks for your help,
Pablo -- http://www.ousia.tk ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___________________________________________________________________________________
Taco Hoekwater Elvenkind BV
On 8/16/20 11:46 AM, Taco Hoekwater wrote:
\xmlfilter is your friend:
\startxmlsetups xml:initialize \xmlsetsetup{#1}{html}{xml:gen} \stopxmlsetups
\xmlregistersetup{xml:initialize}
\startxmlsetups xml:gen \xmlfilter{#1}{/**/span[@class='special']/command(xml:special)} \stopxmlsetups
\startxmlsetups xml:special \bgroup\bfd\ssd\xmlflush{#1}\egroup \stopxmlsetups
Many thanks for your reply, Taco. This was extremely handy and helpful (it is also the first time I understand what \xmlfilter is used for). My final solution required nesting filters, which worked perfectly fine (included below). Many thanks for your help, Pablo Just for the record: \startbuffer[demo] <html> <body> <div id="First"> <p>This is <span class="special">One</span> a paragraph.</p> <p>This is another paragraph.</p> <p>This is another <span class="special">Two</span> paragraph.</p> <p>This is another <span class="special">Three</span> paragraph.</p> <p>This is another <span class="special">Four</span> paragraph.</p> </div> <div id="Second"> <p>This is <span class="special">A</span> a paragraph.</p> <p>This is another paragraph.</p> <p>This is another <span class="special">B</span> paragraph.</p> <p>This is another <span class="special">C</span> paragraph.</p> <p>This is another <span class="special">D</span> paragraph.</p> </div> </body> </html> \stopbuffer \startxmlsetups xml:initialize \xmlsetsetup{#1}{html}{xml:gen} \stopxmlsetups \xmlregistersetup{xml:initialize} \startxmlsetups xml:gen \xmlfilter{#1}{/**/div/command(xml:chapter)} \stopxmlsetups \startxmlsetups xml:chapter \startsection[title=\xmlatt{#1}{id}] \startitemize[packed] \xmlfilter{#1}{**/span[@class='special']/command(xml:special)} \stopitemize \stopsection \stopxmlsetups \startxmlsetups xml:special \startitem\xmlflush{#1}\stopitem \stopxmlsetups \starttext \xmlprocessbuffer{main}{demo}{} \stoptext -- http://www.ousia.tk
participants (2)
-
Pablo Rodriguez
-
Taco Hoekwater