|
Subject: [xsl] An efficient XSLT program that searches a large XML document for all occurrences of a string? From: "Roger L Costello costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 2 May 2024 13:07:39 -0000 |
Hi Folks,
I have an XSLT program that locates all leaf elements which have the string
value 'DNKK'. My program outputs the element and the name of its parent:
<xsl:template match="/">
<results>
<xsl:for-each select="//*[not(*)][. eq 'DNKK']">
<result>
<xsl:sequence select="."/>
<parent><xsl:value-of select="name(..)"/></parent>
</result>
</xsl:for-each>
</results>
</xsl:template>
The input XML document is large, nearly 5GB.
When I run my program SAXON throws the OutOfMemoryError message shown below.
To solve the OutOfMemoryError I could add to my heap space (-Xmx) when I
invoke Java. But I wonder if there a way to write my program so that it is
more efficient (i.e., doesn't require so much memory)?
/Roger
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3841)
at
net.sf.saxon.tree.util.FastStringBuffer.ensureCapacity(FastStringBuffer.java:
575)
at
net.sf.saxon.tree.tiny.CompressedWhitespace.uncompress(CompressedWhitespace.j
ava:112)
at
net.sf.saxon.tree.tiny.WhitespaceTextImpl.appendStringValue(WhitespaceTextImp
l.java:82)
at
net.sf.saxon.tree.tiny.TinyParentNodeImpl.getStringValueCS(TinyParentNodeImpl
.java:99)
at
net.sf.saxon.tree.tiny.TinyTree.getTypedValueOfElement(TinyTree.java:530)
at
net.sf.saxon.tree.tiny.TinyElementImpl.atomize(TinyElementImpl.java:105)
at net.sf.saxon.expr.Atomizer.evaluateItem(Atomizer.java:384)
at net.sf.saxon.expr.Atomizer.evaluateItem(Atomizer.java:40)
at
net.sf.saxon.expr.ValueComparison.effectiveBooleanValue(ValueComparison.java:
347)
at
com.saxonica.ee.bytecode.ByteCodeCandidate.effectiveBooleanValue(ByteCodeCand
idate.java:132)
at
net.sf.saxon.expr.FilterIterator$NonNumeric.matches(FilterIterator.java:177)
at
net.sf.saxon.expr.FilterIterator.getNextMatchingItem(FilterIterator.java:76)
at net.sf.saxon.expr.FilterIterator.next(FilterIterator.java:62)
at
net.sf.saxon.om.FocusTrackingIterator.next(FocusTrackingIterator.java:75)
at
net.sf.saxon.expr.FilterIterator.getNextMatchingItem(FilterIterator.java:75)
at net.sf.saxon.expr.FilterIterator.next(FilterIterator.java:62)
at
net.sf.saxon.om.FocusTrackingIterator.next(FocusTrackingIterator.java:75)
at
net.sf.saxon.om.SequenceIterator.forEachOrFail(SequenceIterator.java:134)
at
net.sf.saxon.expr.instruct.ForEach.processLeavingTail(ForEach.java:489)
at
net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:136)
at
net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j
ava:346)
at
net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j
ava:292)
at
net.sf.saxon.expr.instruct.TemplateRule.applyLeavingTail(TemplateRule.java:37
4)
at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:555)
at
net.sf.saxon.trans.XsltController.applyTemplates(XsltController.java:659)
at
net.sf.saxon.s9api.AbstractXsltTransformer.applyTemplatesToSource(AbstractXsl
tTransformer.java:360)
at
net.sf.saxon.s9api.Xslt30Transformer.applyTemplates(Xslt30Transformer.java:28
5)
at net.sf.saxon.Transform.processFile(Transform.java:1313)
at net.sf.saxon.Transform.doTransform(Transform.java:853)
at net.sf.saxon.Transform.main(Transform.java:82)
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] XSL-List Guidelines, B Tommie Usdin btusd | Thread | Re: [xsl] An efficient XSLT program, Martin Honnen martin |
| Re: [xsl] How to set an element as , Leo Studer leo.stude | Date | Re: [xsl] An efficient XSLT program, Martin Honnen martin |
| Month |