2016-10-11 6 views
-1

私は、このHTMLファイルitems.phpあります​​でこれらのHTMLタグをpreg_matchする方法は?

<all> 
    <designItems base="http://website.com/cms/items/"> 
    <item price="20" contentId="10928" name="Designed by X091"> 
     <hair set="10"> 
     <data> 
      <![CDATA[ 
      [{"c":110092,"y":10,"x":34}] 
      ]]> 
     </data> 
     </hair> 
    </item> 

    <item price="90" contentId="10228" name="Designed by XXX"> 
     <hair set="2"> 
     <data> 
      <![CDATA[ 
      [{"c":110022,"y":-2,"x":90}] 
      ]]> 
     </data> 
     </hair> 
    </item> 
    </designItems> 
</all> 

を、私は/ name="Designed by X091"を持っており、それが価格とコンテンツID、およびその髪のセットです取得している項目(複数可)を見つけるためにpreg_matchを使用したいとデータ。

preg_matchで可能ですか?ありがとう:)

+0

確かに可能です。これまでに何を試しましたか? –

+0

@ Magnus Erikssonどこから始めたらいいか分からなかった。 HTMLを検索する 'preg_match'に関するすべての答えは特定のHTML属性を持っていますが、私の価格とcontentId属性は毎回異なります。 –

+2

これは実際にはHTMLのようには見えませんが、XMLに似ています。 'preg_match()'を使うのではなく、PHPのXML関数を使って属性を読み込みます。 SimpleXMLの詳細はこちら:http://php.net/manual/en/simplexml.examples-basic.php –

答えて

2

このため、誤った解析の可能性が大きすぎるため、正規表現は使用しません。代わりに、SimpleXMLなどの解析ライブラリを使用する必要があります。

次に、単純なループを使用して、name属性を調べることができます。このようなもの、つまり:

$items = new SimpleXMLElement ($items); 

// Loop through all of the elements, storing the ones we want in an array. 
$wanted = array(); 
foreach ($items->designItems->item as $current) { 
    // Skip the ones we're not interested in. 
    if ($current['title'] != 'designed by aaaa') { 
     continue; 
    } 

    // Do whatever you want with the item here. 
} 
関連する問題