XInclude processing
If you are using Xerces as your XML parser, you can have Xerces expand any XInclude directives.
The -xi option on the command line causes XInclude processing to be applied to
          most input XML documents. This includes source documents and schema documents
          listed on the command line, and also those loaded indirectly for example by calls on the
          doc() function or by mechanisms such as xs:include and
          xs:import. It does not, however, affect the parsing of XSLT stylesheet modules.
From the Java API, the equivalent is to call setXInclude() on the
          Configuration object, or to set the configuration property XINCLUDE to true.
XInclude processing can be requested at a per-document level by creating an AugmentedSource and calling its
          setXIncludeAware() method. The corresponding method is also recognized on
          Saxon's implementation of the JAXP DocumentBuilderFactory. When the
          doc() or document() or collection() function is
          called from an XPath expression, XInclude processing can be enabled by including
          xinclude=yes among the query parameters in the URI.
It is possible to request XInclude processing for the documents in a collection by including
          the query parameter xinclude=yes in the collection URI. Similarly, for a document
          read using the doc() or document() functions, XInclude processing can
          be requested using xinclude=yes in the document URI -- but only if the
          StandardURIResolver is used, and the feature is enabled by calling
          Configuration.setParameterizedURIResolver() or by setting -p:on
          on the Query or Transform command lines.
The xsl:source-document
          instruction can enable XInclude processing using
          the extension attribute saxon:xinclude="yes".
It is also possible to switch on XInclude processing (for all documents) by setting the system property:
-Dorg.apache.xerces.xni.parser.XMLParserConfiguration= org.apache.xerces.parsers.XIncludeParserConfigurationAn alternative approach is to incorporate an XInclude processor as a SAX filter in the input pipeline. You can find a suitable SAX filter at http://xincluder.sourceforge.net/, and you can incorporate it into your application as described in Writing input filters.
On the .NET platform, there is a customized XmlReader that performs XInclude
          processing available at GitHub project Mvp.Xml.NetStandard. You can supply this as an argument to the method
          Build(XmlReader parser) in the DocumentBuilder class of the .NET Saxon API. (Not tested).
For further information on using XInclude, see http://www.sagehill.net/docbookxsl/Xinclude.html.