On 05/16/2018 12:41 AM, Nick Wellnhofer wrote:
> On May 15, 2018, at 21:56 , Stefan Sauer <enso...@hora-obscura.de> wrote:
>> On 05/15/2018 08:40 PM, Stefan Sauer wrote:
>>> On 05/15/2018 12:42 PM, Nick Wellnhofer wrote:
>>>> Can you try to change the line to
>>>>
>>>>     xmlCtxtUseOptions(pctxt, ctxt->parseFlags);
>>>>
>>>> and see if it helps?
>>>>
>>> It does not help. I'll experiment further. Thanks for the recomendations.
> I think you also have to remove the line at 
> https://git.gnome.org/browse/libxml2/tree/xinclude.c#n463
>
>     pctxt->loadsubset |= XML_DETECT_IDS;
>
> Looks like the idea is to make sure that ID attributes are detected for 
> XIncludes with XPointers. IMO, it should be the application's responsibility 
> to set the XML_PARSE_DTDLOAD flag in this case. But changing the behavior 
> might break code that relies on this feature.
This helps!

LD_LIBRARY_PATH=~/debug/lib ~/debug/bin/xmllint --timing --xinclude
--nonet --noent --noout glib-docs.xml
Parsing took 0 ms
Xinclude processing took 179 ms
Freeing took 17 ms

So one solution could be another flag to enable this?
>> Is libxml2 doing that for each file over and over?
> Yes.
Actually easy to confirm using --load-trace:
https://gist.github.com/ensonic/e1c4c7f80a0c072d119a649722de1e20
>> Wouldn't it make sense to only load each dtd once?
> This would make sense.
>
>> And where exatly is it loaded (I can only
>> see xmlFreeDtd, but can't find a xmlLoadDtd or the like.
> Via xmlParseDocument -> xmlSAX2ExternalSubset -> xmlParseExternalSubset.
Thanks, reading the code. Need to figure where we could cache external
subsets and what a suitable keys is (ExternalID ?).

Stefan

>
> Nick
>


_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to