0

XML ファイルで一致する文字列を検索するスクリプトがあるという問題があります。これが私のスクリプトです:

   <?php
$file = "klein.xml";
$lines = file($file);
foreach ($lines as $line_num => $line)
{
    echo htmlentities($line);
    echo "<br>";

}

   if (preg_match("/message/", htmlentities($line), $found))
   {
     echo "Found!";
     echo $found[0]; 
     echo "test";
   }
   else
   {
       echo "Not Found!";
   }
?>

これは私が使用しているxmlファイルです:

    <?xml version="1.0" encoding="ISO-8859-1"?>
<product-data>
<message-header>
<message-id>OR-1361163557-gr</message-id>
<message-timestamp>1361163557</message-timestamp>
<export-version current_version="1">OGPDX-2.01.01</export-version>
</message-header>
</product-data>

問題は、'product' を preg マッチすると正しく動作しますが、別の文字列、つまり 'message' を preg マッチしようとすると動作しませんか?

解決策に興味があります。事前に感謝します!

4

3 に答える 3

0

このコードを確認していただけますか。ifループを外側に配置していることに気付きましたforeach。したがって、最後の行のみが実行されます。

<?php
$file = "klein.xml";
$lines = file($file);
foreach ($lines as $line_num => $line)
{
   if (preg_match("/message/", htmlentities($line), $found))
   {
     echo "Found ".$found[0]."<br />";
   }
}
?>
于 2013-03-21T08:13:34.133 に答える
0

$line問題はあなたのロジックにあります:あなたは含まれている最後の値のみをチェックしています</product-data>

于 2013-03-21T08:14:46.993 に答える
0

それで、あなたは何を探していますか?あなたのxmlの行...
「製品」(最後の行)を検索しているとき $line は最後の行にあります。

foreach ($lines as $line_num => $line)
{
   if (preg_match("/message/", $line , $found))
   {
     echo "Line: $line_num - ".$found[0]." <br>";
   }
}
于 2013-03-21T08:16:10.330 に答える