public function loadIncludes($dom, $filepath = '', $namespace = '')
    {
        $xpath = new \DOMXPath($dom);
        $query = "//*[local-name()='include' and namespace-uri()='http://www.w3.org/2001/XMLSchema']";
        $includes = $xpath->query($query);

        foreach ($includes as $entry) {
            $parent = $entry->parentNode;
            $xsd = new \DOMDocument();
            $xsdFileName = realpath($filepath.DIRECTORY_SEPARATOR.$entry->getAttribute("schemaLocation"));
            if ($this->debug) {
                print('Including '.$xsdFileName."\n");
            }

            if (!file_exists($xsdFileName)) {
                if ($this->debug) {
                    print $xsdFileName. " is not found \n";
                }
                continue;
            }

            $result = $xsd->load($xsdFileName,
            LIBXML_DTDLOAD|LIBXML_DTDATTR|LIBXML_NOENT|LIBXML_XINCLUDE);
            if ($result) {
                $mxpath = new \DOMXPath($xsd);
                $this->shortNamespaces = array_merge($this->shortNamespaces, $this->getNamespaces($mxpath));
            }
            foreach ($xsd->documentElement->childNodes as $node) {
                if ($node->nodeName == $this->xsdNs.":include") {
                    $loc = realpath($filepath.DIRECTORY_SEPARATOR.$node->getAttribute('schemaLocation'));
                    $node->setAttribute('schemaLocation', $loc);
                    if ($this->debug) {
                        print('Change included schema location to '.$loc." \n");
                    }
                    $newNode = $dom->importNode($node, true);
                    $parent->insertBefore($newNode, $entry);
                } else {
                    if ($namespace != '') {
                        $newNodeNs = $xsd->createAttribute("namespace");
                        $textEl = $xsd->createTextNode($namespace);
                        $newNodeNs->appendChild($textEl);
                        $node->appendChild($newNodeNs);
                    }

                    $newNode = $dom->importNode($node, true);
                    $parent->insertBefore($newNode, $entry);
                }
            }
            $parent->removeChild($entry);
        }

/*         $xpath = new \DOMXPath($dom);
        $query = "//*[local-name()='include' and namespace-uri()='http://www.w3.org/2001/XMLSchema']";
        $includes = $xpath->query($query);
        if ($includes->length != 0) {
            $dom = $this->loadIncludes($dom);
        } */

        if ($this->debug) {
            print_r("\n------------------------------------\n");
        }

        return $dom;
    }
public function loadIncludes($dom, $filepath = '', $namespace = '')
    {
        $xpath = new \DOMXPath($dom);
        $query = "//*[local-name()='include' and namespace-uri()='http://www.w3.org/2001/XMLSchema']";
        $includes = $xpath->query($query);

        foreach ($includes as $entry) {
            $parent = $entry->parentNode;
            $xsd = new \DOMDocument();
            $xsdFileName = realpath($filepath.DIRECTORY_SEPARATOR.$entry->getAttribute("schemaLocation"));
            if ($this->debug) {
                print('Including '.$xsdFileName."\n");
            }

            if (!file_exists($xsdFileName)) {
                if ($this->debug) {
                    print $xsdFileName. " is not found \n";
                }
                continue;
            }

            $result = $xsd->load($xsdFileName,
            LIBXML_DTDLOAD|LIBXML_DTDATTR|LIBXML_NOENT|LIBXML_XINCLUDE);
            if ($result) {
                $mxpath = new \DOMXPath($xsd);
                $this->shortNamespaces = array_merge($this->shortNamespaces, $this->getNamespaces($mxpath));
            }
            foreach ($xsd->documentElement->childNodes as $node) {
                if ($node->nodeName == $this->xsdNs.":include") {
                    $loc = realpath($filepath.DIRECTORY_SEPARATOR.$node->getAttribute('schemaLocation'));
                    $node->setAttribute('schemaLocation', $loc);
                    if ($this->debug) {
                        print('Change included schema location to '.$loc." \n");
                    }
                    $newNode = $dom->importNode($node, true);
                    $parent->insertBefore($newNode, $entry);
                } else {
                    if ($namespace != '') {
                        $newNodeNs = $xsd->createAttribute("namespace");
                        $textEl = $xsd->createTextNode($namespace);
                        $newNodeNs->appendChild($textEl);
                        $node->appendChild($newNodeNs);
                    }

                    $newNode = $dom->importNode($node, true);
                    $parent->insertBefore($newNode, $entry);
                }
            }
            $parent->removeChild($entry);
        }

/*         $xpath = new \DOMXPath($dom);
        $query = "//*[local-name()='include' and namespace-uri()='http://www.w3.org/2001/XMLSchema']";
        $includes = $xpath->query($query);
        if ($includes->length != 0) {
            $dom = $this->loadIncludes($dom);
        } */

        if ($this->debug) {
            print_r("\n------------------------------------\n");
        }

        return $dom;
    }
public function loadIncludes ( $ dom , $ filepath = '' , $ namespace = '' ) { $ xpath = new \ DOMXPath ( $ dom ) ; $ query = "//*[local-name()='include' and namespace-uri()='http://www.w3.org/2001/XMLSchema']" ; $ includes = $ xpath -> query ( $ query ) ; foreach ( $ includes as $ entry ) { $ parent = $ entry -> parentNode ; $ xsd = new \ DOMDocument ( ) ; $ xsdFileName = realpath ( $ filepath . DIRECTORY_SEPARATOR . $ entry -> getAttribute ( "schemaLocation" ) ) ; if ( $ this -> debug ) { print ( 'Including ' . $ xsdFileName . "\n" ) ; } if ( ! file_exists ( $ xsdFileName ) ) { if ( $ this -> debug ) { print $ xsdFileName . " is not found \n" ; } continue ; } $ result = $ xsd -> load ( $ xsdFileName , LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_NOENT | LIBXML_XINCLUDE ) ; if ( $ result ) { $ mxpath = new \ DOMXPath ( $ xsd ) ; $ this -> shortNamespaces = array_merge ( $ this -> shortNamespaces , $ this -> getNamespaces ( $ mxpath ) ) ; } foreach ( $ xsd -> documentElement -> childNodes as $ node ) { if ( $ node -> nodeName == $ this -> xsdNs . ":include" ) { $ loc = realpath ( $ filepath . DIRECTORY_SEPARATOR . $ node -> getAttribute ( 'schemaLocation' ) ) ; $ node -> setAttribute ( 'schemaLocation' , $ loc ) ; if ( $ this -> debug ) { print ( 'Change included schema location to ' . $ loc . " \n" ) ; } $ newNode = $ dom -> importNode ( $ node , true ) ; $ parent -> insertBefore ( $ newNode , $ entry ) ; } else { if ( $ namespace != '' ) { $ newNodeNs = $ xsd -> createAttribute ( "namespace" ) ; $ textEl = $ xsd -> createTextNode ( $ namespace ) ; $ newNodeNs -> appendChild ( $ textEl ) ; $ node -> appendChild ( $ newNodeNs ) ; } $ newNode = $ dom -> importNode ( $ node , true ) ; $ parent -> insertBefore ( $ newNode , $ entry ) ; } } $ parent -> removeChild ( $ entry ) ; } /*         $xpath = new \DOMXPath($dom);
        $query = "//*[local-name()='include' and namespace-uri()='http://www.w3.org/2001/XMLSchema']";
        $includes = $xpath->query($query);
        if ($includes->length != 0) {
            $dom = $this->loadIncludes($dom);
        } */ if ( $ this -> debug ) { print_r ( "\n------------------------------------\n" ) ; } return $ dom ; }
Load includes in XML Schema

@param DOMDocument $dom       Instance of DOMDocument
@param string      $filepath
@param string	  $namespace

@return void
Load includes in XML Schema