Re: Parsing XML files as text with collection()
Martin Honnen <[email protected]> Fri, 9 Oct 2020 16:17:34 +0200
| Newsgroups | gmane.text.xml.saxon.help |
|---|---|
| Message-ID | <[email protected]> |
Am 09.10.2020 um 14:31 schrieb Imsieke, Gerrit, le-tex:
> I want a recursive directory scan to read in all XML files as unparsed
> text. Then I want to remove the DOCTYPE declaration and named entities
> with replace(). Then I want to parse them with parse-xml(). The reason
> is that all kinds of DTDs at different locations will be referred, but I
> don't have access to these DTDs, and they don't matter for the purpose
> of my analysis.
>
> The documentation says that Saxon will use heuristics to infer the type
> of file. How can I force Saxon to read every *.xml file, although it may
> appear as an XML document, as text?
With Saxon (tested with HE 10.2 Java) from the command line I have no
problems to use uri-collection and unparsed-text in XQuery or XSLT e.g.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all" version="3.0">
<xsl:param name="uri" as="xs:string"
>file:/C:/SomePath/SomeFolder/</xsl:param>
<xsl:param name="pattern" as="xs:string"><![CDATA[<\?xml
.*?>\s*<!DOCTYPE .*?>]]></xsl:param>
<xsl:template name="xsl:initial-template">
<xsl:sequence
select="uri-collection($uri || '?select=*.xml') !
(unparsed-text(.) => replace($pattern, '') => parse-xml())"
/>
</xsl:template>
</xsl:stylesheet>