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

search for in the

domxml_xslt_stylesheet_doc> <domxml_version
Last updated: Fri, 13 Nov 2009

view this page in

domxml_xmltree

(PHP 4 >= 4.2.0)

domxml_xmltree XML 文章から PHP オブジェクトツリーを作成する

説明

DomDocument domxml_xmltree ( string $str )

この関数は、str の XML ドキュメントをパースし、 パースされた文章としてPHPオブジェクトのツリーを返します。

他の関数はこのツリーにはアクセスできないため、 この関数は他の関数と異なっています。 例えばノードを追加する時のように、このツリーを修正することには、 現在 XML ファイルとしてツリーをダンプする手段がないため意味がありません。

しかしながら、この関数はファイルを読み込んで内容を調べたい場合には有用です。

パラメータ

str

XML ファイルの内容

返り値

DomDocument によって開始される DOM オブジェクトのツリーを返します。



domxml_xslt_stylesheet_doc> <domxml_version
Last updated: Fri, 13 Nov 2009
 
add a note add a note User Contributed Notes
domxml_xmltree
MediaHound
20-Dec-2007 04:49
And, arguably more important:
    Note: This extension has been moved to the » PECL repository and is no longer bundled with PHP as of PHP 5.0.0.

    Note: This extension is no longer marked experimental. It will, however, never be released with PHP 5, and will only be distributed with PHP 4. If you need DOM XML support with PHP 5 you can use the DOM extension. This domxml extension is not compatible with the DOM extension.

http://www.php.net/domxml
jeroen dot s at zonnet dot nl
16-May-2006 08:36
You can modify the returned DomDocument, and dump it as an XML file
by using DomDocument->dump_mem() or DomDocument->dump_file().
23-Feb-2005 02:38
Replacing line 10 works well, but replacing line 15 causes some errors. I have a tree like:

<admin>

<user level="0">
<username>admin</username>
<password>admin_pass</password>
</user>
<user level="1">
<username>moder</username>
<password>moder_pass</password>
</user>

</admin>

when I remove those brackets only the last <user> is included into array. In this example it would be
<user level="1">
<username>moder</username>
<password>juozux</password>
</user>

no user name admin, etc.

p.s. I don't store passwords in plain text in xml, that was just an example :))
Alan71
07-Feb-2004 06:05
In the function of nutbar, try to  replace line 10 by
$objptr = $branch->node_value();
and line 15 by :
$objptr = &$object[$branch->node_name()]; //without the '[]'

it makes an array much more easier to read.
Previously, it produces an array like $MyArray[ROOT][0][BRANCH1][0][BRANCH2][0][5], and now $MyArray[ROOT][BRANCH1][BRANCH2][5]. There isn't bugs in the example I use, and I haven't tested with arguments. I think that an implementation of a part of nospam's code is enough.

I hope this will help!
samc a t rampantlabs dot net
27-Dec-2002 08:36
Forgive me if I am mistaken, but the whole point of including the "useless white space" is because of the existence of mixed types, for example:

the schema def:

<xsd:element name="paragraph">
        <xsd:complexType mixed="true">
                <xsd:choice>
                        <xsd:element ref="link" />
                        <xsd:element ref="emphasisText" />
                </xsd:choice>
        </xsd:complexType>
</xsd:element>

and an example:

<paragraph>This here is a paragraph.  You'll notice that it has within it a bunch of text punctuated by other <emphasisText>tags</emphasisText> and it is <link target="me.html>my</url> understanding that the only way to read this text is by reading the tagless nodes that your functions strip.</paragraph>

I could be way off though...
colin at omenmedia dot com
13-Dec-2002 03:03
This is a genuinely useful function, however, as with any DOM-based markup parser, be mindful of the size of the XML document you are parsing.  Representing very large XML files as object structures requires *a lot* of memory and processing, and may even crash your server (which is what happened to my Apache when I tried parsing a 2MB XML file using this function, just for fun... ;).
nospam at candlefire dot org
15-Oct-2002 03:03
Consider the following revisions for including attributes into the array.

function domxml_xmlarray ($branch)
{
    $object = Array ();
    $objptr =& $object;
    $branch = $branch->first_child ();

    while ($branch)
    {
        if (!($branch->is_blank_node()))
        {
            switch ($branch->node_type())
            {
                case XML_TEXT_NODE:
                {
                    $objptr['cdata'] = $branch->node_value ();
                    break;
                }
                case XML_ELEMENT_NODE:
                {
                    $objptr =& $object[$branch->node_name ()][];
                    if ($branch->has_attributes ())
                    {
                        $attributes = $branch->attributes ();
                        if (!is_array ($attributes)) { break; }
                        foreach ($attributes as $index => $domobj)
                        {
                            $objptr[$index] = $objptr[$domobj->name] = $domobj->value;
                        }
                    }
                    break;
                }
            }
            if ($branch->has_child_nodes ()) { $objptr = array_merge ($objptr, domxml_xmlarray ($branch)); }
        }
        $branch = $branch->next_sibling ();
    }

    return $object;
}
nutbar at innocent dot com
13-Oct-2002 07:18
Same concept as previous function, except uses node names as key items in the arrays.  This function may prove a bit more useful than the previous one:

    function domxml_xmlarray($branch) {
        $object = array();
        $objptr = &$object;
        $branch = $branch->first_child();

        while ($branch) {
            if (!($branch->is_blank_node())) {
                switch ($branch->node_type()) {
                    case XML_TEXT_NODE: {
                        $objptr['cdata'] = $branch->node_value();

                        break;
                    }
                    case XML_ELEMENT_NODE: {
                        $objptr = &$object[$branch->node_name()][];

                        break;
                    }
                }

                if ($branch->has_child_nodes()) {
                    $objptr = array_merge($objptr, domxml_xmlarray($branch));
                }
            }

            $branch = $branch->next_sibling();
        }

        return $object;
    }

Usage is identical to the previous function.

domxml_xslt_stylesheet_doc> <domxml_version
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites