Processing XML: Header and footer, data manipulation
![](https://secure.gravatar.com/avatar/880e9a15b17a0bf7159f4e31030a9be2.jpg?s=120&d=mm&r=g)
Hello, Pablo Rodríguez wrote in „From pandoc to ConTeXt“: „So, if I was able to do this, probably anybody can do it.“ Well, I tried and indeed it isn’t as difficult as i thought. (Once I learned that an entity must not contain non-ASCII characters.) Some questions remain: I want to set page headers based on information I get from the XML: \startxmlsetups xml:prozess \mainlanguage[de] \setupheadertexts[\bf\xmltext{#1}{/pnr} \xmltext{#1}{/pname}][\date] {\bTABLE \setupTABLE[frame=off] \setupTABLE[offset=1mm] \setupTABLE[c][1][align=right, width=14cm] \setupTABLE[c][2][align=left, width=6cm] \setupTABLE[c][3][align=right, width=4cm] \bTR \bTD \bfb\xmltext{#1}{/pnr} \eTD \bTD Version: \eTD \bTD \bf\xmltext{#1}{/pversion}\eTD \eTR \bTR \bTD \bfb\xmltext{#1}{/pname} \eTD \bTD Verantwortlich: \eTD \bTD \bf\xmltext{#1}{/pverantwortlich}\eTD\eTR \eTABLE} \blank \xmlflush{#1} \stopxmlsetups This works on the first page (when the document has more than one page) but headers and footers are empty on subsequent pages. Something (xmlflush?) overwrites my setup. Any idea how I can fix that? I want to use xmlconcat here, since there may be more than one docan, but I only get the „, “ \startxmlsetups xml:psoutdoc % \inmargin{\xmltext{#1}{/docan} $\Leftarrow$} {\bf \xmltext{#1}{/docnr}}\xmlflush{#1} \inmargin{\xmlconcat{#1}{/docan}{, } $\Leftarrow$} {\bf \xmltext{#1}{/docnr}}\xmlflush{#1} \xmlsave{#1}{outfile.xml} \blank \stopxmlsetups I want to write the nodes psindoc and psoutdoc to a separate file. \xmlsave overwrites the file, is there a way to append to the file? (or append to a buffer and write the buffer?) \startxmlsetups xml:psindoc \inmargin{\xmltext{#1}{/docverantwortlich} $\Rightarrow$} {\bf \xmltext{#1}{/docnr}}\xmlflush{#1} \xmlsave{#1}{outfile.xml} \blank \stopxmlsetups Can I add child notes to #1? The last two questions probably require LUA, what is a good way to start learning LuaTeX? I enclosed a small test file. Greetings Axel PS: This may result in an article for „Die TeXnische Komödie“.
![](https://secure.gravatar.com/avatar/5955e8e90611e77ccbfc7721b6112027.jpg?s=120&d=mm&r=g)
On 4/22/19 7:57 AM, Axel Kielhorn wrote:
[...] Some questions remain:
Hi Axel, I have some questions about your source file: \startxmlsetups xml:prozess \mainlanguage[de] If this is hardcoded (I mean, you don’t read it from any XML code), I would avoid setting the \mainlanguage here. And you already set it in lines 82-83: \language[de] \mainlanguage[de] BTW, is there any reason to set both \language and \mainlanguage? (\mainlanguage should be enough.)
I want to set page headers based on information I get from the XML:
\startxmlsetups xml:prozess \setupheadertexts[\bf\xmltext{#1}{/pnr} \xmltext{#1}{/pname}][\date]
This works on the first page (when the document has more than one page) but headers and footers are empty on subsequent pages.
Something (xmlflush?) overwrites my setup. Any idea how I can fix that?
I have a workaround for that: \title{\xmltext{#1}{/pnr} \xmltext{#1}{/pname}} And in your preamble: \setupheadertexts[title][\date] \setuphead[title] [placehead=empty, before=, after=, page=,]
I want to use xmlconcat here, since there may be more than one docan, but I only get the „, “
\startxmlsetups xml:psoutdoc % \inmargin{\xmltext{#1}{/docan} $\Leftarrow$} {\bf \xmltext{#1}{/docnr}}\xmlflush{#1} \inmargin{\xmlconcat{#1}{/docan}{, } $\Leftarrow$} {\bf \xmltext{#1}{/docnr}}\xmlflush{#1} \xmlsave{#1}{outfile.xml} \blank \stopxmlsetups
I would avoid using: \startxmlsetups xml:docname \xmlflush{#1} \stopxmlsetups instead of "\xmltext{#1}{/docname}" in the proper places. You need to add to get proper content: \startxmlsetups xml:docan \xmlflush{#1} \stopxmlsetups I would replace docname with docan in both places (xmlsetsetup and its proper \starxmlsetups). BTW, what should be child notes to #1? An special lpath or what? Just in case it helps, Pablo -- http://www.ousia.tk
![](https://secure.gravatar.com/avatar/880e9a15b17a0bf7159f4e31030a9be2.jpg?s=120&d=mm&r=g)
Am 22.04.2019 um 11:40 schrieb Pablo Rodriguez
: I have some questions about your source file:
\startxmlsetups xml:prozess \mainlanguage[de]
If this is hardcoded (I mean, you don’t read it from any XML code), I would avoid setting the \mainlanguage here.
And you already set it in lines 82-83:
\language[de] \mainlanguage[de]
BTW, is there any reason to set both \language and \mainlanguage? (\mainlanguage should be enough.)
A leftover from merging two documents. Once should be sufficient. I’m not sure if it was a good idea to use german names for the elements. Using english names and making the language configurable may be the next step.
I want to set page headers based on information I get from the XML:
\startxmlsetups xml:prozess \setupheadertexts[\bf\xmltext{#1}{/pnr} \xmltext{#1}{/pname}][\date]
This works on the first page (when the document has more than one page) but headers and footers are empty on subsequent pages.
Something (xmlflush?) overwrites my setup. Any idea how I can fix that?
I have a workaround for that:
\title{\xmltext{#1}{/pnr} \xmltext{#1}{/pname}}
And in your preamble:
\setupheadertexts[title][\date] \setuphead[title] [placehead=empty, before=, after=, page=,]
I want to use xmlconcat here, since there may be more than one docan, but I only get the „, “
\startxmlsetups xml:psoutdoc % \inmargin{\xmltext{#1}{/docan} $\Leftarrow$} {\bf \xmltext{#1}{/docnr}}\xmlflush{#1} \inmargin{\xmlconcat{#1}{/docan}{, } $\Leftarrow$} {\bf \xmltext{#1}{/docnr}}\xmlflush{#1} \xmlsave{#1}{outfile.xml} \blank \stopxmlsetups
I would avoid using:
\startxmlsetups xml:docname \xmlflush{#1} \stopxmlsetups
instead of "\xmltext{#1}{/docname}" in the proper places.
Right, I startet out \xmlflush{}ing everything and turned it into \xmltext later. I missed this one.
You need to add to get proper content:
\startxmlsetups xml:docan \xmlflush{#1} \stopxmlsetups
I would replace docname with docan in both places (xmlsetsetup and its proper \starxmlsetups).
Great, it works now.
BTW, what should be child notes to #1? An special lpath or what?
I want to add <docan>\xmltext{#1}{../../pverantwortlich}</docan> to psindoc And <docverantwortlich>\xmltext{#1}{../../pverantwortlich}</docverantwortlich> to psoutdoc before writing the ps[in|out]doc to an extra file. But thinking about it, it may be easier to load a <doclist></doclist> tree from a separate file and add / edit the doc entries based on the <docnr>. (<docnr>s are unique.) This part isn’t even in my head now.
Just in case it helps,
It did, thanks! Right now the document does what I wanted to do in ConTeXt. I’m tempted to write the remaining functions in lua instead of python. Still a lot to learn ahead. Greetings Axel
participants (2)
-
Axel Kielhorn
-
Pablo Rodriguez