Question

On my development system Php 5.3 The following SimpleXML object is working fine:

    $fs = "lectio1"
    $xmldoc = simplexml_load_file($filename);
    $ln = $xmldoc->xpath("//item[fileName/@filestem='$fs']/title");
    print_r($ln)


Array ( [0] => SimpleXMLElement Object ( [0] => Lectio 1, Prologus ) )

But the same function in php 5.4 produces the following result.

Array ( [0] => SimpleXMLElement Object ( ) )

Can anyone help me figure out what is happening?

A fragment of the XML file is as follows:

 <?xml version="1.0" encoding="UTF-8"?>
 <listofFileNames>
 <div id="body">
    <div id="principia" class="toplevel">
        <head>Principia</head>
        <item>
            <fileName filestem="principiumI">principiumI.xml</fileName>
            <title>Principium I</title>
            <hasParts>
                <part>
                    <slug>vat</slug>
                    <title>Vatican</title>
                    <initial>V</initial>
                </part>
            </hasParts>
        </item>
        <item>
            <fileName filestem="principiumII">principiumII.xml</fileName>
            <title>Principium II</title>
            <hasParts>
                <part>
                    <slug>vat</slug>
                    <title>Vatican</title>
                    <initial>V</initial>
                </part>
            </hasParts>
        </item>
        <item>
            <fileName filestem="principiumIII">principiumIII.xml</fileName>
            <title>Principium III</title>
            <hasParts>
                <part>
                    <slug>vat</slug>
                    <title>Vatican</title>
                    <initial>V</initial>
                </part>
                <part>
                    <slug>sorb</slug>
                    <title>Sorbonne</title>
                    <initial>S</initial>
                </part>
            </hasParts>
        </item>
        <item>
            <fileName filestem="principiumIV">principiumIV.xml</fileName>
            <title>Principium IV</title>
            <hasParts>
                <part>
                    <slug>reims</slug>
                    <title>Reims</title>
                    <initial>R</initial>
                </part>
                <part>
                    <slug>svict</slug>
                    <title>St. Victor</title>
                    <initial>SV</initial>
                </part>
                <part>
                    <slug>sorb</slug>
                    <title>Sorbonne</title>
                    <initial>S</initial>
                </part>
            </hasParts>
        </item>
    </div>
    <div id="deFide" class="toplevel">
        <head>de Fide</head>
        <item>
            <fileName filestem="lectio1">lectio1.xml</fileName>
            <title>Lectio 1, Prologus</title>
            <hasParts>
                <part>
                    <slug>reims</slug>
                    <title>Reims</title>
                    <initial>R</initial>
                </part>
                <part>
                    <slug>vat</slug>
                    <title>Vatican</title>
                    <initial>V</initial>
                </part>
                <part>
                    <slug>svict</slug>
                    <title>St. Victor</title>
                    <initial>SV</initial>
                </part>
                <part>
                    <slug>sorb</slug>
                    <title>Sorbonne</title>
                    <initial>S</initial>
                </part>
            </hasParts>
        </item>
        <item>
            <fileName filestem="lectio2">lectio2.xml</fileName>
            <title>Lectio 2, Prologus</title>
            <hasParts>
                <part>
                    <slug>reims</slug>
                    <title>Reims</title>
                    <initial>R</initial>
                </part>
                <part>
                    <slug>vat</slug>
                    <title>Vatican</title>
                    <initial>V</initial>
                </part>
                <part>
                    <slug>svict</slug>
                    <title>St. Victor</title>
                    <initial>SV</initial>
                </part>
                <part>
                    <slug>sorb</slug>
                    <title>Sorbonne</title>
                    <initial>S</initial>
                </part>
            </hasParts>
        </item>
        <item>
            <fileName filestem="lectio3">lectio3.xml</fileName>
            <title>Lectio 3, Prologus</title>
            <hasParts>
                <part>
                    <slug>reims</slug>
                    <title>Reims</title>
                    <initial>R</initial>
                </part>
                <part>
                    <slug>vat</slug>
                    <title>Vatican</title>
                    <initial>V</initial>
                </part>
                <part>
                    <slug>svict</slug>
                    <title>St. Victor</title>
                    <initial>SV</initial>
                </part>
                <part>
                    <slug>sorb</slug>
                    <title>Sorbonne</title>
                    <initial>S</initial>
                </part>
            </hasParts>
        </item>
     </div>
   </div>
 </listofFileNames>
Was it helpful?

Solution

Don't rely on print_r or var_dump when it comes to SimpleXml, rather do:

foreach ($ln as $l)
    echo htmlentities($l->asXML());

With this method, the result with 5.3.10 vs. 5.4.9 is the same:

<title>Lectio 1, Prologus</title>

PHP 5.3.10: see http://codepad.viper-7.com/RL8L0i

PHP 5.4.9: see http://codepad.viper-7.com/0JgAmQ

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top