downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

DomDocumentType->entities> <DomDocument->html_dump_mem
Last updated: Fri, 20 May 2011

view this page in

DomDocument->xinclude

(PHP 5)

DomDocument->xinclude Reemplaza sentencias XInclude en un Objeto DomDocument

Descripción

int DomDocument->xinclude ( void )

Esta función reemplaza elementos » XInclude en un objeto DomDocument.

Example #1 Sustitución de elementos Xinclude

<?php

// include.xml contiene :
// <child>prueba</child>

$xml '<?xml version="1.0"?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="include.xml">
    <xi:fallback>
      <error>xinclude: no se encontr&oacute; include.xml</error>
    </xi:fallback>
  </xi:include>
</root>'
;

$domxml domxml_open_mem($xml);
$domxml->xinclude();

echo 
$domxml->dump_mem();

?>

El resultado del ejemplo sería:

<?xml version="1.0"?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
  <child>prueba</child>
</root>

Si include.xml no existe, usted verá:

<?xml version="1.0"?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
  <error>xinclude: no se encontr&oacute; include.xml</error>
</root>



DomDocumentType->entities> <DomDocument->html_dump_mem
Last updated: Fri, 20 May 2011
 
add a note add a note User Contributed Notes DomDocument->xinclude
collin at paperclipped dot com 19-Feb-2010 06:03
I had to do things a bit differently to use xincludes (also following the example above only included a part of the XML):

<?php
$xml
= '<?xml version="1.0" encoding="utf-8"?>
<site xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="home.xml#xpointer(/site/*)">
        <xi:fallback>
            <error>Error: home.xml not found or invalid!</error>
        </xi:fallback>
    </xi:include>
    <xi:include href="services.xml#xpointer(/site/*)">
        <xi:fallback>
            <error>Error: services.xml not found or invalid!</error>
        </xi:fallback>
    </xi:include>
    <xi:include href="about.xml#xpointer(/site/*)">
        <xi:fallback>
            <error>Error: about.xml not found or invalid!</error>
        </xi:fallback>
    </xi:include>
    <xi:include href="contact.xml#xpointer(/site/*)">
        <xi:fallback>
            <error>Error: contact.xml not found or invalid!</error>
        </xi:fallback>
    </xi:include>
</site>'
;

$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xml);
$xmlDoc->xinclude();

echo
$xmlDoc->saveXML();
?>
www dot spam at whoah dot net 21-Aug-2004 01:29
Tips for anyone trying to use nested <xi:include /> blocks:

- Multiple calls to DOMDocument::xinclude() are required to parse each level of include blocks, you can either call xinclude() a fixed amount of times (enough to cover your needs), or you can check for leftover <xi:include /> blocks after each call to DOMDocument::xinclude() to see if you need to call it again.

- If you are going to use an <xi:include /> block in an included file, you must define the "xi" namespace in the included file where another include block exists, the namespace definition will not carry through from the first xml file

eg.

==========
a.xml (xi definition needed)
----------
<?xml version="1.0"?>
<a xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="includes/b.xml" />
</a>
==========

==========
b.xml (xi definition needed)
----------
<?xml version="1.0"?>
<b xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="c.xml" />
</b>
==========

==========
c.xml (xi definition not needed)
----------
<?xml version="1.0"?>
<c>whatever</c>
==========

- Futher to my example above, if you are including an xml file that has another include inside it, the href "base" url will be taken from the 2nd file. In the above example, "c.xml" is actually in the same directory as "b.xml", whereas "a.xml" is in the directory above, but because b is calling c, the "base" directory is seen as "includes/"

Another tip not related to nested xincludes, but simply xinclude stuff in general:

I wanted to turn this...
<a>
    <b />
    <c />
    <d />
    <e />
</a>

...into this...
<a>
    <xi:include file="bcde.xml" />
</a>

...but then bcde.xml would have looked like this...
<b />
<c />
<d />
<e />

...which is not valid xml and was causing an error. So just remember that included files need to be valid and may still only have one root element.

These are from my experiences with PHP5.0.1, I'm not a DOMXML expert at all. Enjoy!
amm at remasys dot com 02-Jul-2004 04:14
xml Include using xpointer to include specific part of another xml doc

Main xml file (or string):
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
   <optional>
      <xi:include href="include.xml#xpointer(/parts/*)" parse="xml">
         <xi:fallback>
            <error>Error.</error>
         </xi:fallback>
      </xi:include>
   </optional>
   <blah>blah</blah>
   <blah>blah</blah>
</root>

Include.xml file (or string:
<?xml version="1.0" encoding="utf-8"?>
<parts>
   <part>part one</part>
   <part>part two</part>
   <part>part three</part>
</parts>

href="include.xml#xpointer(/parts/*)"
will include all <part> tags but NOT <parts>

href="include.xml#xpointer(/parts/part[1])"
will include <part>part one</part>

simple but very usefull.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites