Michael
Michael

Reputation: 6405

php, regex, xml

I have some sort of ... xml document as below :

<file src="136090000-136100000">
  <member id="136090000">
        <Name>
              <![CDATA[DOSEKUN DANIEL ADETUNJI]]>
              </Name>
        <Email>
              <![CDATA[[email protected]]]>
              </Email>
        <DateRegistration>
              <![CDATA[10/19/2010 8:46:57 PM]]>
              </DateRegistration>
  </Member>
  <usafisMember id="136090001">
        <Name>
              <![CDATA[yoleida colina]]>
              </Name>
        <Email>
              <![CDATA[[email protected]]]>
              </Email>
        <DateRegistration>
              <![CDATA[10/19/2010 8:47:08 PM]]>
              </DateRegistration>
  </usafisMember>
  <usafisMember id="136090002">
        <Name>
              <![CDATA[Homero Valdovinos]]>
              </Name>
        <Email>
              <![CDATA[[email protected]]]>
              </Email>
        <DateRegistration>
              <![CDATA[10/19/2010 8:47:01 PM]]>
              </DateRegistration>
  </Member>

I need to extract the member id , name, email and DateRegistration but as you can see the xml is not very well formatted . I tried with simple xml which obviously doesn't work but nether regex doesn't seem to work . Here is the pattern that I tried :

$pattern = "/<Name><\\!\\[CDATA\\[(.*)\\]\\]><\/Name>/";
preg_match_all($pattern, $xml_content, $matches);
$name = $matches[1][0][v];
echo " name is $name ";

Upvotes: 0

Views: 464

Answers (2)

user557846
user557846

Reputation:

    $x='<file src="136090000-136100000">
      <usafisMember id="136090000">
            <Name>
                  <![CDATA[DOSEKUN DANIEL ADETUNJI]]>
                  </Name>
            <Email>
                  <![CDATA[[email protected]]]>
                  </Email>
            <DateRegistration>
                  <![CDATA[10/19/2010 8:46:57 PM]]>
                  </DateRegistration>
      </usafisMember>
      <usafisMember id="136090001">
            <Name>
                  <![CDATA[yoleida colina]]>
                  </Name>
            <Email>
                  <![CDATA[[email protected]]]>
                  </Email>
            <DateRegistration>
                  <![CDATA[10/19/2010 8:47:08 PM]]>
                  </DateRegistration>
      </usafisMember>
      <usafisMember id="136090002">
            <Name>
                  <![CDATA[Homero Valdovinos]]>
                  </Name>
            <Email>
                  <![CDATA[[email protected]]]>
                  </Email>
            <DateRegistration>
                  <![CDATA[10/19/2010 8:47:01 PM]]>
                  </DateRegistration>
      </usafisMember>
        </file>
    ';

    $xml = new SimpleXMLElement($x);



foreach ($xml->usafisMember as $usafisMember){
echo 'Name: '. $usafisMember->Name.'<br>';
}

had to add close file but other wise worked as expected

Upvotes: 0

Lightness Races in Orbit
Lightness Races in Orbit

Reputation: 385204

Parsing XML with regex is almost certainly wrong. Use a dedicated XML parser. There are plenty available for php.

Upvotes: 3

Related Questions