2011-01-03 3 views
0

У меня есть какие-то ... XML-документа, как показано ниже:PHP, регулярное выражение, XML

<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> 

Мне нужно извлечь ID пользователя, имя, адрес электронной почты и DateRegistration, но как вы можете видеть, что XML не является очень хорошо отформатирован. Я пробовал с простым xml, который, очевидно, не работает, но нижнее регулярное выражение не работает. Вот образец, который я попробовал:

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

Использование XML-анализатор, как SimpleXML. – BoltClock

+0

Извините за то, что я был очевиден, но почему вы не используете http://ru2.php.net/simplexml? – zerkms

+3

Является ли XML всегда отсутствующим тегом закрывающего файла или могут быть какие-либо другие недопустимые конструкции? – Chandu

ответ

0
$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>'; 
} 

пришлось добавить закрыть файл, но другие мудрые работали, как и ожидалось

3

Синтаксический XML с регулярным выражением является almost certainly wrong. Используйте специальный синтаксический анализатор XML. Есть много доступных для php.

+0

ОК, но я думаю, что XML-документ не очень хорошо сформирован ... – Michael

+0

XML не может быть либо хорошо отформатированный, либо неформатированный; это может быть справедливо. Если это недействительный XML, тогда вы должны найти XML, который есть, иначе вы никогда не сможете это сделать надежно. –

+0

(Ваш XML выглядит нормально для меня на первый взгляд, кроме отсутствующего закрывающего тега.) –

Смежные вопросы