我有一个非常(非常)长的 XML 文件,我正在使用 ConTeXt 将其转换成一本书。
这可以读取文件并按原样输出:
\starttext
\startbuffer[test]
\input /Users/ramfub/Documents/complete_advent.xml
\stopbuffer
\getbuffer[test]
\stoptext
\startbuffer
如果我在和命令之间复制 XML 文件的内容\stopbuffer
,它可以正常工作:
\startbuffer[test]
<EveningPrayer>
<TitleSection>
<Title>First Sunday of Advent</Title>
<PsalterWeek>Psalter, Week I</PsalterWeek>
<Hour>Evening Prayer I</Hour>
</TitleSection>
<Hymn>
...
<CollectLine></CollectLine>
<CollectLine></CollectLine>
</Collect>
</DaytimePrayer>
\stopbuffer
(xmlsetups)
\xmlprocessbuffer{test}{test}{}
但是,如果我尝试将 XML 文件读入缓冲区,它不起作用(没有错误,但根本没有输出):
\startbuffer[test]
\input /Users/ramfub/Documents/complete_advent.xml
\stopbuffer
(xmlsetups)
\xmlprocessbuffer{test}{test}{}
我不想将 10,000 多页 XML 复制到我的 .tex 文件中。
答案1
您不必先将文件读入缓冲区。可以\xmlprocessfile
直接处理 XML 文件。
欲了解更多信息,请阅读XML 手册 (PDF)。
如果您由于某种原因想要将文件读入缓冲区,例如在 Lua 中对其进行预处理等,您可以轻松地自己实现这样的宏。
\startluacode
function buffers.fromfile(name,file)
if not buffers.exists(name) then
buffers.assign(name,io.loaddata(resolvers.findfile(file)))
end
end
interfaces.implement {
name = "readbufferfromfile",
actions = buffers.fromfile,
arguments = { "string", "string" }
}
\stopluacode
\unprotect
\unexpanded\def\readbufferfromfile{\dodoubleempty\doreadbufferfromfile}
\def\doreadbufferfromfile[#1][#2]{\clf_readbufferfromfile{#1}{#2}}
\protect
\starttext
\readbufferfromfile[name][test.xml]
\typebuffer[name]
\stoptext