2011-01-03 16 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で試しましたが、nether正規表現は動作していないようです。

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

働いていました。 – 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>'; 
} 

は近いファイルを追加する必要がありましたが、予想通り、他の賢明はSimpleXMLのように、XMLパーサを使用し

3

正規表現とXMLがalmost certainly wrongある解析:ここに私が試したパターンがあります。専用のXMLパーサーを使用します。 PHPには十分なものがあります。

+0

ですが、XML文書はあまり整形されていないと思います... – Michael

+0

XMLは使用できません形式の整ったものか、整形されていないものか。それは有効でしかない。それが有効なXMLでない場合は、XMLを見つける必要があります。それ以外の場合は、これを確実に行うことはできません。 –

+0

(あなたのXMLは一見して見分けがつきますが、欠落している終了タグは除きます)。 –