Skip to content

Commit

Permalink
Merge pull request #6 from ndw/add-utility
Browse files Browse the repository at this point in the history
Add utility method to XInclude a file
  • Loading branch information
ndw authored Nov 4, 2022
2 parents 47b05cc + 3fed91b commit 87002aa
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 36 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
fi
echo "tag=$tag" >> $GITHUB_OUTPUT
build-and-deploy:
build-and-test:
runs-on: ubuntu-latest
needs: check_branch
env:
Expand Down
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ plugins {
id 'com.github.gmazzo.buildconfig' version "2.0.2"
}

sourceCompatibility=1.8
targetCompatibility=1.8

repositories {
mavenLocal()
mavenCentral()
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ org.gradle.jvmargs=-Xmx4096m

basename=sinclude
sincludeTitle=Saxon XInclude
sincludeVersion=4.1.0
sincludeVersion=4.2.0

saxonVersion=11.3
saxonVersion=11.4
59 changes: 26 additions & 33 deletions src/main/java/com/nwalsh/sinclude/XInclude.java
Original file line number Diff line number Diff line change
@@ -1,48 +1,22 @@
package com.nwalsh.sinclude;

import com.nwalsh.DebuggingLogger;
import com.nwalsh.sinclude.exceptions.XIncludeException;
import com.nwalsh.sinclude.exceptions.XIncludeFallbackException;
import com.nwalsh.sinclude.exceptions.XIncludeLoopException;
import com.nwalsh.sinclude.exceptions.XIncludeNoFragmentException;
import com.nwalsh.sinclude.exceptions.XIncludeSyntaxException;
import com.nwalsh.sinclude.schemes.ElementScheme;
import com.nwalsh.sinclude.schemes.RFC5147Scheme;
import com.nwalsh.sinclude.schemes.SearchScheme;
import com.nwalsh.sinclude.schemes.XPathScheme;
import com.nwalsh.sinclude.schemes.XmlnsScheme;
import com.nwalsh.sinclude.exceptions.*;
import com.nwalsh.sinclude.schemes.*;
import com.nwalsh.sinclude.utils.ReceiverUtils;
import com.nwalsh.sinclude.xpointer.DefaultFragmentIdParser;
import com.nwalsh.sinclude.xpointer.FragmentIdParser;
import com.nwalsh.sinclude.xpointer.ParseType;
import com.nwalsh.sinclude.xpointer.Scheme;
import com.nwalsh.sinclude.xpointer.SchemeData;
import com.nwalsh.sinclude.xpointer.SelectionResult;
import com.nwalsh.sinclude.xpointer.*;
import net.sf.saxon.event.Receiver;
import net.sf.saxon.event.ReceiverOption;
import net.sf.saxon.expr.parser.Loc;
import net.sf.saxon.om.AttributeInfo;
import net.sf.saxon.om.AttributeMap;
import net.sf.saxon.om.EmptyAttributeMap;
import net.sf.saxon.om.FingerprintedQName;
import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.om.NodeName;
import net.sf.saxon.s9api.Axis;
import net.sf.saxon.s9api.QName;
import net.sf.saxon.s9api.XdmDestination;
import net.sf.saxon.s9api.XdmNode;
import net.sf.saxon.s9api.XdmNodeKind;
import net.sf.saxon.s9api.XdmSequenceIterator;
import net.sf.saxon.om.*;
import net.sf.saxon.s9api.*;
import net.sf.saxon.trans.XPathException;
import net.sf.saxon.type.BuiltInAtomicType;

import javax.xml.XMLConstants;
import java.io.File;
import java.net.URI;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Stack;
import java.util.Vector;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand Down Expand Up @@ -191,6 +165,25 @@ public XdmNode expandXIncludes(XdmNode node) throws XPathException {
return walker.walk(node);
}

public void expandXIncludes(File input, File output) throws SaxonApiException, XPathException {
Processor processor = new Processor(false);
DocumentBuilder builder = processor.newDocumentBuilder();
XdmNode node = builder.build(input);
logger = new DebuggingLogger(node.getUnderlyingNode().getConfiguration().getLogger());

TreeWalker walker = new TreeWalker();
walker.register(xi_include, new XiIncludeHandler(this));
walker.register(xi_fallback, new XiFallbackHandler());

XdmNode result = walker.walk(node);

Serializer serializer = processor.newSerializer(output);
serializer.setOutputProperty(Serializer.Property.METHOD, "xml");
serializer.setOutputProperty(Serializer.Property.INDENT, "no");
serializer.serializeNode(walker.walk(result));
serializer.close();
}

private interface ElementHandler {
XdmNode process(XdmNode node) throws XPathException;
}
Expand Down

0 comments on commit 87002aa

Please sign in to comment.